为什么在添加组件之前我不应该调用setVisible(true)?
我已经看过在这个站点上写了很多次(比如这里和这里 ),在向JComponent
添加组件之前,你不能调用setVisible(true)
,但是我还没有看到解释和信息互联网似乎稀缺。
为什么会出现这种情况,如果违反规则会发生什么?
如果你先打电话,那么你不会破坏任何东西,但如果你添加了任何东西的话,你可能需要再次打电话。 否则,Swing将不会呈现添加的组件。 您需要让JVM调用JFrame的paint(...)
方法来渲染JFrame的组件,而setVisible(true)
将要求JVM执行此操作。 如果您在调用setVisible(true)之后添加了组件,并且没有看到组件,则会发现如果重新调整JFrame的大小,它们将“实现”。 这是因为重新resize会导致操作系统询问Swing重新绘制GUI,这将导致调用paint(...)
。
请注意,如果在创buildGUI之后添加组件,则可以调用revalidate()
并经常在其容器上repaint()
以获取正确布局的新组件,然后进行渲染。 如果组件中的更改涉及到删除,或者在其他组件被先前可视化的地方绘制了组件,则repaint()
将是必需的。
一个build议,我强烈build议: 肮脏的富客户买Guy和Haase。 只要购买它! 你不会后悔购买。
放大@ Hovercraft的有用的分析,你可能还必须重新pack()
封闭的顶级容器。 这个在setVisible()
之后向JList
添加元素的例子可以说明这种权衡。