我已经读过,当JPanel
对象(或扩展JPanel
的任何类的实例)是JFrame
的一部分时,每次JVM认为{{1}需要刷新,调用JFrame
实例的JPanel
方法。
但是当我有两个这样的对象时会发生什么,这两个对象是两个不同的类的实例?运行我在最后提供的代码,我发现调用了两个paintComponent()
方法,当我最小化时,更改大小或按paintComponent()
。
然而,当我按下colourButton
时,这不。它只调用labelButton
。为什么会这样?
提前谢谢!
MyDrawPanel paintComponent()
答案 0 :(得分:1)
frame.repaint();
这告诉框架重绘自己及其所有子节点。因此,框架上的所有组件都被重新绘制。
label.setText("You've changed me!");
setText()
方法会在标签上调用revalidate()
和repaint()
。 repaint()
告诉标签重绘自己及其所有孩子。
如果任何组件的大小发生变化,revalidate()
将调用布局管理器。在这种情况下,看起来标签会变大。这意味着添加到中心的面板(您的DrawPanel)将变小,因此它也需要重新绘制。
NORTH / SOUTH中的组件不受标签大小更改的影响,因此不会重新绘制。
所以Swing只会重新绘制最小化绘画所需的一切。