12

我在这个网站上看到过很多次(比如hereheresetVisible(true) ),在向 a 添加组件之前你不能调用它JComponent,但我还没有看到解释,互联网上的信息似乎很少。

为什么会这样,如果你违反规则会发生什么?

4

2 回答 2

21

如果你先调用它,你不会破坏任何东西,但如果你添加了任何东西,你可能需要再次调用它。否则 Swing 不会渲染添加的组件。您需要让 JVM 调用 JFrame 的paint(...)方法来渲染 JFrame 的组件,并setVisible(true)要求 JVM 执行此操作。如果您曾经在调用 setVisible(true) 之后添加过组件并且没有看到这些组件,那么您会发现如果您重新调整 JFrame 的大小,它们将“具体化”。这是因为重新调整它的大小会导致操作系统要求 Swing 重新绘制 GUI,这将导致paint(...)被调用。

请注意,如果您在创建 GUI 之后添加组件,您可以revalidate()经常repaint()在其容器上调用 and 以使新组件正确布局,然后进行渲染。如果组件的更改涉及删除,或者在先前可视化另一个组件的位置绘制一个组件,repaint()肯定是必要的。

我强烈推荐的一本书建议:肮脏的富客户购买盖伊和哈斯。就买吧!您不会后悔购买。

于 2012-05-28T21:17:03.933 回答
7

放大@Hovercraft 的有用分析,您可能还必须重新pack()封装顶级容器。这个将元素添加到after的示例可以说明权衡取舍。JListsetVisible()

于 2012-05-28T21:49:57.443 回答