我在这个网站上看到过很多次(比如here和heresetVisible(true)
),在向 a 添加组件之前你不能调用它JComponent
,但我还没有看到解释,互联网上的信息似乎很少。
为什么会这样,如果你违反规则会发生什么?
如果你先调用它,你不会破坏任何东西,但如果你添加了任何东西,你可能需要再次调用它。否则 Swing 不会渲染添加的组件。您需要让 JVM 调用 JFrame 的paint(...)
方法来渲染 JFrame 的组件,并setVisible(true)
要求 JVM 执行此操作。如果您曾经在调用 setVisible(true) 之后添加过组件并且没有看到这些组件,那么您会发现如果您重新调整 JFrame 的大小,它们将“具体化”。这是因为重新调整它的大小会导致操作系统要求 Swing 重新绘制 GUI,这将导致paint(...)
被调用。
请注意,如果您在创建 GUI 之后添加组件,您可以revalidate()
经常repaint()
在其容器上调用 and 以使新组件正确布局,然后进行渲染。如果组件的更改涉及删除,或者在先前可视化另一个组件的位置绘制一个组件,repaint()
则肯定是必要的。
我强烈推荐的一本书建议:肮脏的富客户购买盖伊和哈斯。就买吧!您不会后悔购买。
放大@Hovercraft 的有用分析,您可能还必须重新pack()
封装顶级容器。这个将元素添加到after的示例可以说明权衡取舍。JList
setVisible()