当我在一个JFrame中有多个JPanel对象时,repaint()如何工作?

时间:2015-05-23 22:28:25

标签: java swing jpanel paintcomponent repaint

我已经读过,当JPanel对象(或扩展JPanel的任何类的实例)是JFrame的一部分时,每次JVM认为{{1}需要刷新,调用JFrame实例的JPanel方法。

但是当我有两个这样的对象时会发生什么,这两个对象是两个不同的类的实例?运行我在最后提供的代码,我发现调用了两个paintComponent()方法,当我最小化时,更改大小或按paintComponent()

然而,当我按下colourButton时,这。它只调用labelButton。为什么会这样?

提前谢谢!

MyDrawPanel paintComponent()

1 个答案:

答案 0 :(得分:1)

frame.repaint(); 

这告诉框架重绘自己及其所有子节点。因此,框架上的所有组件都被重新绘制。

label.setText("You've changed me!");

setText()方法会在标签上调用revalidate()repaint()repaint()告诉标签重绘自己及其所有孩子。

如果任何组件的大小发生变化,revalidate()将调用布局管理器。在这种情况下,看起来标签会变大。这意味着添加到中心的面板(您的DrawPanel)将变小,因此它也需要重新绘制。

NORTH / SOUTH中的组件不受标签大小更改的影响,因此不会重新绘制。

所以Swing只会重新绘制最小化绘画所需的一切。