这些Java教程是针对JDK 8编写的。本页面中描述的示例和实践不利用后续版本引入的改进,并且可能使用不再可用的技术。
有关Java SE 9及其后续版本中更新的语言特性的摘要,请参阅Java语言更改。
有关所有JDK版本的新功能、增强功能以及已删除或弃用选项的信息,请参阅JDK发行说明。
paint
方法,然后调用paintComponent
,paintBorder
和paintChildren
。系统会在组件第一次绘制、调整大小或者被另一个窗口隐藏后重新显示时自动调用该方法。repaint
方法来实现程序化重绘;不要直接调用paintComponent
方法。调用repaint
会使绘制子系统采取必要的步骤,以确保paintComponent
方法在适当的时候被调用。repaint
的多参数版本允许你缩小组件的剪辑矩形(受绘制操作影响的屏幕部分),从而使绘制更高效。我们在moveSquare
方法中利用了这个技术,避免了重绘未改变的屏幕部分。该方法还有一个无参数版本,将重绘整个组件的表面区域。moveSquare
方法不是调用一次repaint
,而是调用两次。第一次调用重绘了组件中方块之前所在的区域(继承的行为是用当前背景颜色填充区域)。第二次调用重绘了组件中方块当前所在的区域。repaint
,但Swing会将这些信息合并成一次操作来重绘组件。paintComponent
重写方法的第一行代码中使用super.paintComponent(g)
来传递Graphics
参数。如果不这样做,那么你的组件将需要手动绘制其背景。你可以尝试将该行代码注释掉并重新编译,看看背景是否不再绘制。RedSquare
类中,应用程序保持了面向对象的设计,使得MyPanel
类的paintComponent
方法保持干净。绘制仍然工作,因为我们通过调用paintSquare(Graphics g)
方法将Graphics
对象传递给了红色方块。请记住,这个方法的名称是我们从头开始创建的;我们没有覆盖任何更高级别的Swing API中的paintSquare
方法。