public abstract class JComponent

该类是除顶层容器外所有 Swing 组件的基类。要使用继承自 JComponent 的组件,必须将该组件置于一个根为顶层 Swing 容器的包含层次结构(containment hierarchy)中。顶层 Swing 容器(如 JFrame、JDialog 和 JApplet)是专门为其他 Swing 组件提供绘制自身场所的组件。有关包含层次结构的解释,请参阅 The Java Tutorial 中的 Swing Components and the Containment Hierarchy 一节。

paintComponent

protected void paintComponent(Graphics g)

如果 UI 委托为非

null,则调用该 UI 委托的 paint 方法。向该委托传递

Graphics 对象的副本,以保护其余的 paint 代码免遭不可取消的更改(例如

Graphics.translate)。

如果在子类中重写此方法,则不应该对传入的 Graphics 进行永久更改。例如,不应更改剪贴区的 Rectangle 或修改转换。如果需要进行这些操作,您会发现根据传入的 Graphics 创建一个新 Graphics 并进行操作更加方便。另外,如果不调用超类的实现,则必须遵守不透明属性,也就是说,如果此组件是不透明的,则必须以透明的颜色完全填充背景。如果不遵守不透明属性,则很可能看到可视的人为内容。

传入的 Graphics 对象可能安装了恒等转换以外的转换。在这种情况下,如果多次应用其他转换,则可能得到不可预料的结果。

这个是一个能够进行绘制的组件,无论何种原因,只要窗口需要重新绘图(窗口扩大或缩小),事件处理器就会告知组件,从而引发执行所有组件的paintComponent方法。

注意:一定不要自己调用该方法。在应用程序需要重新绘制的时候,这个方法将被自动调用(自动的),不要认为地干预这个自动的处理过程。

何种类别的动作会触发这个自动响应过程呢?例如,在用户扩大或极小化窗口,然后又恢复窗口的大小时会引发重新绘图。如果用户弹出另一个窗口,并且这个窗口覆盖了一个已经存在的窗口,使得覆盖的窗口不可见,则此时被覆盖的应用程序窗口被破坏,需要重新绘制。

提示:如果需要强制刷新屏幕,就需要调用repaint方法,而不是该方法。它将引发采用相应配置的Graphics独享调用所有组件的paintComponent方法。

从方法结构来看,该方法只有一个Graphics类型的参数。对于屏幕显示来说,Graphics对象的度量单位是像素。坐标(0,0)指出所绘制组件表面的左上角。