20

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

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

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

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

JFrameそのコンテンツに応じてサイズを変更するよりスムーズな方法はありますか?

4

1 に答える 1

11

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

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

于 2009-11-13T17:11:29.693 に答える