Как автоматически изменить размер JFrame в соответствии с содержанием - PullRequest
20 голосов
/ 13 ноября 2009

Я создал пользовательский JPanel, который отображает изображения (давайте назовем его MyPanel), я добавил это в contentPane JFrame.

Я хочу, чтобы размер JFrame автоматически изменялся в соответствии с MyPanel при изменении изображения.

Похоже, мне нужно позвонить frame.pack(), чтобы сделать это. Вызов pack() из MyPanel увеличивает связь, поэтому я не хочу этого делать.

Чтобы решить эту проблему, я расширил JFrame (назовем это MyFrame) и сделал MyFrame наблюдателем и MyPanel наблюдаемым. Всякий раз, когда изображение MyPanel отображает изменения, оно уведомляет слушателей, MyFrame для этого экземпляра. А затем MyFrame вызывает pack(), когда получает уведомление.

Существует ли более плавный способ изменения размера JFrame в соответствии с его содержимым?

1 Ответ

10 голосов
/ 13 ноября 2009

Решение, которое вы описали, кажется разумным.

Кроме того, всякий раз, когда MyPanel меняет свое изображение, он может найти свой родительский кадр и затем вызвать pack () для него. Если такого фрейма не существует, то ничего не делайте. Нет необходимости создавать дополнительные классы, и это настолько слабая связь, сколько вы собираетесь получить. Вы можете использовать SwingUtilities.getAncestorOfClass () , чтобы сделать это легко.

...