2009-11-13 11 views
20

Ich habe eine benutzerdefinierte JPanel erstellt, die Bilder anzeigt (nennen wir es MyPanel), ich habe dies zu JFrame 's contentPane hinzugefügt.Wie man die Größe von JFrame nach Inhalt automatisch ändert

Ich möchte JFrame, um die Größe automatisch angepasst werden, um die MyPanel passen, wenn Bild ändert.

Es sieht so aus, als müsste ich frame.pack() anrufen, um dies zu tun. Der Aufruf von pack() von MyPanel erhöht die Kopplung, also möchte ich das nicht tun.

die Frage, die ich JFrame erweitert zu lösen (nennen wir es MyFrame) und machte MyFrame Beobachter und MyPanel beobachtet werden. Wenn das Bild MyPanel Änderungen anzeigt, benachrichtigt es die Listener MyFrame für diese Instanz. Und dann ruft MyFramepack(), wenn es die Benachrichtigung erhält.

Gibt es eine glattere Art der Größenänderung JFrame nach seinem Inhalt?

Antwort

10

Die von Ihnen beschriebene Lösung scheint vernünftig zu sein.

Alternativ, wenn MyPanel sein Bild ändert, kann es seinen übergeordneten Frame suchen und dann pack() darauf aufrufen. Wenn kein solcher Frame existiert, dann tue nichts. Keine Notwendigkeit, zusätzliche Klassen zu erstellen, und es ist eine lose Kopplung, wie Sie bekommen werden. Sie können dazu einfach SwingUtilities.getAncestorOfClass() verwenden.

+1

Ja, mein Ansatz war vernünftig. Danke für die Genehmigung :) – nimcap

Verwandte Themen