我很好奇当JFrame调整大小时,Java中究竟会发生什么。
我问这是因为我在JFrame中向我的bigCOntainer(类型为JPanel)添加组件时遇到了问题。我希望在用户执行某个操作时添加一些内容但是在JFrame以某种方式调整大小之前,该组件不会被明显添加。
当我做一些尝试让新组件出现时,我发现了这一点;我调用了myJFrame.pack()。作为第二个问题,我想知道pack()的作用,通常和特定于调整大小。 Java文档使得它将每个组件的大小调整为其首选大小。我的解决方案,如果我决定在我的实现中使用pack()来显示新组件,则总是设置首选大小。任何人都可以证明这是一个公认的编程实践吗?这看起来确实是一个好主意。
我还尝试使用repaint()来显示新组件,但这不起作用。
答案 0 :(得分:4)
您需要在运行时添加或删除组件的容器上调用revalidate()
和然后 repaint()
。
revalidate()
告诉容器的布局管理器重新布局它包含的组件,这就是代码中缺少的内容。如果没有这个请求,布局就不会改变,在重新调整GUI大小之前,你不会看到更改,这几乎可以做同样的事情。
请注意,如果您在启动时向GUI添加组件,那么解决方案是仅在 后调用pack()
和setVisible(true)
到顶级容器 已添加所有组件。
有关pack()
做什么的具体信息,请做我们所做的事情 - 阅读源代码。