众所周知,如需对组件进行一些自定义的绘制,将必须重写paintComponent方法。当组件需要绘制时,会调用该方法,但是整个绘制过程是从
paint()(由java.awt.Component中定义)开始的。
javax.swing.JComponent继承自
java.awt.Component,并将paint()方法细化为三个独立的方法:
-
protected void paintComponent(Graphics g)
-
protected void paintBorder(Graphics g)
-
protected void paintChildren(Graphics g)
一般而言,仅仅paintComponent(Graphics g)经常被重写。
一个组件的绘制过程如下:
1.paint()
调用paintComponent()
.
2.如果UI属性非空,paintComponent()
调用ui.update()。
3.如果组件的opaque属性为真,ui.udpate()
填充组件的背景色并调用ui.paint()。
4.ui.paint()渲染组件的内容。
这正是每次重写paintComponent(Graphics g)时,均需首先调用
super.paintComponent(g)。