为什么我不在添加组件之前调用setvisible(true)?

x7rlezfr  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(369)

我已经在这个网站上看到过很多次了(比如这里,这里),你不能打电话 setVisible(true) 将组件添加到 JComponent ,但我还没有看到一个解释,网上的信息似乎也很少。
为什么会这样,如果你违反了规则怎么办?

b5buobof

b5buobof1#

如果您先调用它,则不会破坏任何内容,但如果您添加了任何内容,则可能需要再次调用它。否则swing不会渲染添加的组件。您需要让jvm调用jframe的 paint(...) 方法来渲染jframe的组件,以及 setVisible(true) 将要求jvm这样做。如果您在调用setvisible(true)之后添加了组件,但没有看到这些组件,那么您会发现,如果您调整jframe的大小,这些组件将“具体化”。这是因为重新调整它的大小会导致操作系统要求swing重新绘制gui,这将导致 paint(...) 被召唤。
注意,如果在创建gui之后添加组件,可以调用 revalidate() 而且经常 repaint() 在它的容器上获得新组件的正确布局,然后进行渲染。这个 repaint() 如果组件中的更改涉及到删除,或者一个组件被绘制在另一个组件之前被可视化的地方,那么这是绝对必要的。
我强烈推荐的一本书:肮脏的有钱客户买盖伊和哈斯。就买吧!你不会后悔的。

3df52oht

3df52oht2#

放大@hovercraft的有用分析,你可能还需要重新考虑- pack() 封闭的顶层容器。此示例将元素添加到 JList 之后 setVisible() ,可以说明权衡。

相关问题