我正在尝试使用JFrame
(实际上,在Scala的Swing包装中为Frame
,但我不明白为什么这很重要)包含BoxLayout
几个项目,其中一个项目会根据按钮点击更改大小(BoxLayout
中的另一项)。
调整大小时,按钮事件处理程序执行以下操作:
JPanel
)上的方法;这会为该组件调用setPreferredSize
。pack
JFrame
repaint
JFrame
醇>
这有一个非常奇怪的警告:JFrame总是落后一步。因此,如果我将首选x尺寸设置为100,200,300,200,100,则JFrame的宽度为100,100,200,300,200。
可能出现什么问题,如何将大小更改传播到JFrame窗口大小时应该是什么?
(更可能但希望不相关的细节:使用Sun Java 1.6.0_24的Ubuntu 10.10。)
答案 0 :(得分:4)
当您更改组件的大小时,我会尝试重新验证()父容器,以便可以再次调用布局管理器,这将正确地重新计算所有大小。
如果您需要更多帮助,请发布展示问题的SSCCE。首先尝试使用JFrame,如果仍然存在问题,您将知道标准JDK类或Scala是否导致问题。
答案 1 :(得分:1)
我同意camickr必须使用revalidate()
而不是pack()
。要解决“落后一步”,请尝试在revalidate()
中致电repaint()
和SwingUtilities.invokeLater()
。