Wie man Autoskal JFrame nach Inhalt
-
20-09-2019 - |
Frage
Ich habe eine benutzerdefinierte JPanel
erstellt, dass zeigen Bilder (Anruf läßt es MyPanel
), habe ich hinzugefügt, dies zu JFrame
des contentPane.
Ich mag JFrame
automatisch angepasst werden, um die MyPanel
, wenn die Bildänderungen anzupassen.
Es sieht aus wie ich Anruf frame.pack()
müssen dies zu tun. Der Aufruf pack()
von MyPanel
erhöht Kupplung so will ich nicht, das zu tun.
Um das Problem zu lösen, ich JFrame
erweitert (nennen wir es MyFrame
) und MyFrame
Beobachter gemacht und MyPanel
beobachtet werden. Jedes Mal, wenn das Bild MyPanel
wird Änderungen Anzeige benachrichtigt er die Zuhörer, MyFrame
für diese Instanz. Und dann MyFrame
Anrufe pack()
wenn sie die Mitteilung erhalten.
Gibt es einen glatten Weg JFrame
nach ihrem Gehalt an Größe ändern?
Lösung
Die Lösung, die Sie sinnvoll beschrieben scheinen.
Alternativ, wenn MyPanel sein Bild ändert, kann es gehen seine Eltern Rahmen finden und dann Pack () aufrufen, auf sie. Wenn kein solcher Rahmen existiert, dann tut nichts. Keine Notwendigkeit, zusätzliche Klassen zu erstellen, und seine wie eine Kupplung lösen, wie Sie bekommen werden. Sie können SwingUtilities.getAncestorOfClass () dies leicht zu tun.