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