我已经多次(例如here和here)在此网站上看到它,在向{{{{}}添加组件之前,您不得调用setVisible(true)
1}},但我没有看到解释,互联网上的信息似乎很少。
为什么会出现这种情况,如果违反规则会发生什么?
答案 0 :(得分:19)
如果你先打电话,你不会破坏任何东西,但如果你添加了任何东西,你可能需要再次打电话。 Else Swing不会渲染添加的组件。您需要让JVM调用JFrame的paint(...)
方法来呈现JFrame的组件,setVisible(true)
将要求JVM执行此操作。如果您在调用setVisible(true)之后添加了组件并且没有看到组件,那么如果重新调整JFrame的大小,您会发现它们将“实现”。这是因为重新调整大小会导致操作系统要求Swing重新绘制GUI,这将导致调用paint(...)
。
请注意,如果在创建GUI后添加组件,则可以在其容器上调用revalidate()
并经常repaint()
来正确布局新组件然后呈现。如果组件中的更改涉及删除,或者正在绘制其中另一个组件之前可视化的组件,那么repaint()
将肯定是。
一本书建议我 高度 建议:Filthy Rich Clients购买Guy and Haase。买吧!你不会后悔购买。
答案 1 :(得分:7)
放大@Hovercraft的有用分析,您可能还需要重新pack()
封闭的顶级容器。这个example会在JList
之后向setVisible()
添加元素,这可以说明权衡取舍。