画像を表示するカスタムJPanel
を作成し(これをMyPanel
と呼びます)、これをJFrame
のcontentPaneに追加しました。
画像が変更されたときにJFrame
に合わせてMyPanel
のサイズを自動的に変更したい。
これを行うには、frame.pack()
を呼び出す必要があるようです。 MyPanel
からpack()
を呼び出すと結合が増えるので、そうしたくありません。
この問題を解決するために、私はJFrame
を拡張し(MyFrame
と呼びましょう)、MyFrame
オブザーバー、およびMyPanel
を監視可能にしました。画像MyPanel
が変更を表示しているときはいつでも、リスナーに通知します。この場合はMyFrame
です。そして、通知を受け取ると、MyFrame
はpack()
を呼び出します。
内容に応じてJFrame
のサイズをよりスムーズに変更する方法はありますか?
あなたが説明した解決策は合理的なようです。
または、MyPanelが画像を変更するたびに、親フレームを見つけて、pack()を呼び出すことができます。そのようなフレームが存在しない場合は、何もしないでください。追加のクラスを作成する必要はなく、取得するのと同じくらい緩い結合です。 SwingUtilities.getAncestorOfClass() を使用して、これを簡単に行うことができます。