为什么在添加组件之前我不应该调用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添加元素的例子可以说明这种权衡。