Java 当子对象调整大小时调整JFrame的大小:如何跟上?
我正在尝试使用一个Java 当子对象调整大小时调整JFrame的大小:如何跟上?,java,swing,scala,resize,Java,Swing,Scala,Resize,我正在尝试使用一个JFrame(实际上,Scala的Swing包装器中的Frame,但我不明白这有什么关系),它包含一个BoxLayout,其中有几个项,其中一个项会随着按钮的点击而改变大小(另一项在BoxLayout中) 调整大小时,按钮事件处理程序执行以下操作: 对更改大小的项(JPanel)调用方法;这将调用该组件的setPreferredSize 在JFrame上调用pack 在JFrame 这是一个非常奇怪的警告:JFrame总是落后一步。因此,如果我将首选的x尺寸设置为100、200
JFrame
(实际上,Scala的Swing包装器中的Frame
,但我不明白这有什么关系),它包含一个BoxLayout
,其中有几个项,其中一个项会随着按钮的点击而改变大小(另一项在BoxLayout
中)
调整大小时,按钮事件处理程序执行以下操作:
JPanel
)调用方法;这将调用该组件的setPreferredSize
JFrame上调用pack
JFrame
(更可能但希望不是相关的细节:Ubuntu 10.10和Sun Java 1.6.0_24。)当您更改组件的大小时,我会尝试重新验证父容器(),以便再次调用布局管理器,它将正确地重新计算所有大小
如果你需要更多的帮助,那就发表你的文章,说明问题所在。首先用JFrame试试,这样如果仍然存在问题,您就会知道是标准JDK类还是Scala导致了问题。我同意camickr的观点,即必须使用
revalidate()
而不是pack()
。要修复“一步落后”问题,请尝试在SwingUtilities.invokeLater()
中调用revalidate()
和repaint()
,在BoxLayout
上重新验证,而不是在JFrame
上进行任何验证/无效组合。谢谢