2009-11-13 12 views
20

Stworzyłem niestandardowy JPanel, który wyświetla obrazy (pozwala nazywać je MyPanel), dodałem to do contentPane JFrame.Jak automatycznie zmienić rozmiar JFrame zgodnie z treścią

Chcę, aby rozmiar JFrame zmieniał się automatycznie, aby pasował do MyPanel podczas zmiany obrazu.

Wygląda na to, że w tym celu muszę zadzwonić pod numer frame.pack(). Wywołanie pack() z MyPanel zwiększa sprzężenie, więc nie chcę tego robić.

Aby rozwiązać problem, wydłużyłem JFrame (można go nazwać MyFrame) i wykonaliśmy obserwację MyFrame i MyPanel. Za każdym razem, gdy obraz wyświetla zmiany, powiadamia detektory dla tej instancji. A następnie MyFrame dzwoni dzwoni pack() kiedy otrzyma powiadomienie.

Czy istnieje płynniejszy sposób zmiany rozmiaru JFrame zgodnie z zawartością?

Odpowiedz

10

Opisane rozwiązanie wydaje się uzasadnione.

Alternatywnie, za każdym razem, gdy MyPanel zmienia obraz, może znaleźć ramkę nadrzędną, a następnie wywołać pakiet(). Jeśli nie istnieje taka Rama, nie rób nic. Nie ma potrzeby tworzenia dodatkowych klas, a także luźnego sprzężenia, jak masz zamiar dostać. Aby to zrobić, możesz użyć SwingUtilities.getAncestorOfClass().

+1

Tak, moje podejście było rozsądne. Dzięki za zgodę :) – nimcap

Powiązane problemy