Как автоматически изменить размер JFrame в соответствии с содержимым
Я создал пользовательский JPanel
, который отображает изображения (позволяет называть его MyPanel
), я добавил это в JFrame
contentPane.
Я хочу, чтобы JFrame
изменялся автоматически, чтобы соответствовать MyPanel
при изменении изображения.
Похоже, мне нужно позвонить frame.pack()
, чтобы сделать это. Вызов pack()
из MyPanel
увеличивает связь, поэтому я не хочу этого делать.
Чтобы решить проблему, я расширил JFrame
(давайте назовем ее MyFrame
) и сделал MyFrame
observer и MyPanel
наблюдаемым. Всякий раз, когда изображение MyPanel
отображает изменения, оно уведомляет слушателей, MyFrame
для этого экземпляра. И затем MyFrame
вызывает pack()
, когда получает уведомление.
Есть ли более плавный способ изменения размера JFrame
в соответствии с его содержимым?
Ответы
Ответ 1
Решение, которое вы описали, кажется разумным.
Кроме того, всякий раз, когда MyPanel меняет свое изображение, он может найти свой родительский кадр и затем вызвать пакет() на нем. Если такой кадр не существует, то ничего не делайте. Нет необходимости создавать дополнительные классы, а также как свободную связь, которую вы собираетесь получить. Вы можете использовать SwingUtilities.getAncestorOfClass(), чтобы сделать это легко.