当一个JFrame被调整大小时会发生什么?

3

我很好奇在Java中当JFrame被调整大小时会发生什么。

我问这个问题是由于我在向JFrame内的bigCOntainer(类型为JPanel)添加组件时遇到的问题。我想在用户执行某个操作时添加一些内容,但是除非JFrame以某种方式重新调整大小,否则该组件不会变得可见。

我在试图让新组件显示出来时发现了这一点;我调用了myJFrame.pack()。作为一个次要的问题,我想知道pack()做了什么,包括一般性和特定于调整大小的方面。Java文档让它听起来像它将调整每个组件的首选大小。如果我决定在我的实现中使用pack()来显示新组件,我的解决方案是始终设置一个首选大小。有人可以证明这是一种被接受的编程实践吗?这似乎是个好主意。

我还尝试了repaint()来显示新组件,但是没有效果。


代码为什么在GUI可见后添加新组件? - Andrew Thompson
为了更快地获得更好的帮助,请发布一个SSCCE - Andrew Thompson
@AndrewThompson,我正在编写的程序是为了练手。然而,在用户加载文件后,我会添加一个标签,以提醒用户程序中正在进行的操作。 - OKGimmeMoney
“..在用户加载文件后添加标签” 在GUI启动时添加一个没有文本的标签。当有消息需要通知用户时,设置文本(可能使用一次性Swing Timer来清除字段)。同时请查看工具提示。 - Andrew Thompson
@AndrewThompson 我已经有工具提示了。我不想在启动时添加标签。这违反了帖子的前提条件,但还是谢谢你的建议。 - OKGimmeMoney
1个回答

4
您需要在运行时调用revalidate(),然后再对容器调用repaint()。这是您的代码中缺少的部分,因为revalidate()会告诉容器的布局管理器重新布置它包含的组件。如果没有此请求,布局不会改变,直到您调整GUI的大小,这几乎相当于做同样的事情。
请注意,如果您正在启动时添加组件到GUI,则解决方案是仅在所有组件都已添加之后对顶级容器调用pack()setVisible(true)
有关pack()的具体信息,请阅读源代码。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接