调整JFrame大小后会发生什么?

时间:2013-06-22 01:08:53

标签: java swing resize jframe repaint

我很好奇当JFrame调整大小时,Java中究竟会发生什么。

我问这是因为我在JFrame中向我的bigCOntainer(类型为JPanel)添加组件时遇到了问题。我希望在用户执行某个操作时添加一些内容但是在JFrame以某种方式调整大小之前,该组件不会被明显添加。

当我做一些尝试让新组件出现时,我发现了这一点;我调用了myJFrame.pack()。作为第二个问题,我想知道pack()的作用,通常和特定于调整大小。 Java文档使得它将每个组件的大小调整为其首选大小。我的解决方案,如果我决定在我的实现中使用pack()来显示新组件,则总是设置首选大小。任何人都可以证明这是一个公认的编程实践吗?这看起来确实是一个好主意。

我还尝试使用repaint()来显示新组件,但这不起作用。

1 个答案:

答案 0 :(得分:4)

您需要在运行时添加或删除组件的容器上调用revalidate()然后 repaint()

revalidate()告诉容器的布局管理器重新布局它包含的组件,这就是代码中缺少的内容。如果没有这个请求,布局就不会改变,在重新调整GUI大小之前,你不会看到更改,这几乎可以做同样的事情。

请注意,如果您在启动时向GUI添加组件,那么解决方案是仅在 后调用pack()setVisible(true)到顶级容器 已添加所有组件。

有关pack()做什么的具体信息,请做我们所做的事情 - 阅读源代码。