当孩子调整大小时调整JFrame的大小:如何跟上?

时间:2011-05-19 03:40:19

标签: java swing scala resize

我正在尝试使用JFrame(实际上,在Scala的Swing包装中为Frame,但我不明白为什么这很重要)包含BoxLayout几个项目,其中一个项目会根据按钮点击更改大小(BoxLayout中的另一项)。

调整大小时,按钮事件处理程序执行以下操作:

  1. 调整更改大小的项目(JPanel)上的方法;这会为该组件调用setPreferredSize
  2. 致电pack
  3. 上的JFrame
  4. 致电repaint
  5. 上的JFrame

    这有一个非常奇怪的警告:JFrame总是落后一步。因此,如果我将首选x尺寸设置为100,200,300,200,100,则JFrame的宽度为100,100,200,300,200。

    可能出现什么问题,如何将大小更改传播到JFrame窗口大小时应该是什么?

    (更可能但希望不相关的细节:使用Sun Java 1.6.0_24的Ubuntu 10.10。)

2 个答案:

答案 0 :(得分:4)

当您更改组件的大小时,我会尝试重新验证()父容器,以便可以再次调用布局管理器,这将正确地重新计算所有大小。

如果您需要更多帮助,请发布展示问题的SSCCE。首先尝试使用JFrame,如果仍然存在问题,您将知道标准JDK类或Scala是否导致问题。

答案 1 :(得分:1)

我同意camickr必须使用revalidate()而不是pack()。要解决“落后一步”,请尝试在revalidate()中致电repaint()SwingUtilities.invokeLater()

相关问题