Я пытаюсь работать с JFrame
(на самом деле, Frame
в оболочке Scala Swing, хотя я не понимаю, почему это должно иметь значение), которое содержит BoxLayout
, в котором есть несколько элементов, один из которых изменяет размер в ответ на нажатие кнопки (еще один элемент в BoxLayout
).
При изменении размера обработчик события кнопки выполняет следующие действия:
- Вызвать метод для элемента (
JPanel
), который меняет размер; это вызывает setPreferredSize
для этого компонента.
- Звоните
pack
на JFrame
- Звоните
repaint
на JFrame
Это работает с одним очень странным предупреждением: JFrame всегда на один шаг позади. Поэтому, если я установлю свои предпочтительные размеры x на 100, 200, 300, 200, 100, JFrame будет иметь ширину 100, 100, 200, 300, 200.
Что может пойти не так, и как мне заставить изменения размера распространяться до размера окна JFrame, когда они должны?
(Более вероятно, но, надеюсь, не относящиеся к делу детали: Ubuntu 10.10 с Sun Java 1.6.0_24.)