Подтвердить что ты не робот

Как автоматически изменить размер JFrame в соответствии с содержимым

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

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

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

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

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

4b9b3361

Ответ 1

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

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