web-dev-qa-db-ja.com

コンテンツに応じてJFrameのサイズを自動変更する方法

画像を表示するカスタムJPanelを作成し(これをMyPanelと呼びます)、これをJFrameのc​​ontentPaneに追加しました。

画像が変更されたときにJFrameに合わせてMyPanelのサイズを自動的に変更したい。

これを行うには、frame.pack()を呼び出す必要があるようです。 MyPanelからpack()を呼び出すと結合が増えるので、そうしたくありません。

この問題を解決するために、私はJFrameを拡張し(MyFrameと呼びましょう)、MyFrameオブザーバー、およびMyPanelを監視可能にしました。画像MyPanelが変更を表示しているときはいつでも、リスナーに通知します。この場合はMyFrameです。そして、通知を受け取ると、MyFramepack()を呼び出します。

内容に応じてJFrameのサイズをよりスムーズに変更する方法はありますか?

20
nimcap

あなたが説明した解決策は合理的なようです。

または、MyPanelが画像を変更するたびに、親フレームを見つけて、pack()を呼び出すことができます。そのようなフレームが存在しない場合は、何もしないでください。追加のクラスを作成する必要はなく、取得するのと同じくらい緩い結合です。 SwingUtilities.getAncestorOfClass() を使用して、これを簡単に行うことができます。

10
Joel Carranza