2009-11-13 2 views
20

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

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

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

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

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

ответ

10

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

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

+1

Да, мой подход был разумным. Спасибо за одобрение :) – nimcap

Смежные вопросы