3

我很好奇在调整 JFrame 大小时在 Java 中究竟发生了什么。

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

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

我还尝试了 repaint() 以显示新组件,但这没有用。

4

1 回答 1

4

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

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

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

有关说什么pack()做什么,做什么我们都做的细节——阅读源代码。

于 2013-06-22T01:10:11.553 回答