Module java.desktop
Package javax.swing

Interface Painter<T>

类型参数:
T - 配置参数的类型
所有已知的实现类:
AbstractRegionPainter

public interface Painter<T>

一个绘画委托。Painter接口定义了一个方法,即paint。它用于开发人员可以在不必通过子类化组件的情况下更改组件的绘画例程的情况下使用。在进行任何形式的绘画委托时,它也是通用有用的。

Painter只是Java2D代码的封装,使得重用现有的Painter或将它们组合在一起变得相当简单。实现这个接口也很容易,如果找不到符合需求的Painter,你可以很轻松地编写一个。编写Painter需要了解Java2D。

一个Painter可以使用类型参数创建。这个类型将在paint方法中使用。例如,你可能希望编写一个只能与Component子类一起使用的Painter。在这种情况下,当声明Painter时,你可以声明它需要一个Component,从而使得paint方法类型安全。例如:

 
 Painter<Component> p = new Painter<Component>() {
     public void paint(Graphics2D g, Component c, int width, int height) {
         g.setColor(c.getBackground());
         //等等
     }
 }
 
 

这个接口不保证线程安全。

自版本:
1.7
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    paint(Graphics2D g, T object, int width, int height)
    渲染到给定的Graphics2D对象。
  • Method Details

    • paint

      void paint(Graphics2D g, T object, int width, int height)

      渲染到给定的Graphics2D对象。这个方法的实现可能修改Graphics2D上的状态,并且不需要在完成后恢复该状态。在大多数情况下,建议调用者传入一个临时的图形对象。 Graphics2D绝不能为null。

      图形对象上的状态可能会被paint方法遵守,但也可能不会。例如,在图形上设置抗锯齿渲染提示可能会或可能不会被Painter实现所尊重。

      提供的对象参数充当可选的配置参数。例如,它可以是Component类型。一个期望这个参数的Painter可以从该Component读取状态并将状态用于绘画。例如,一个实现可以读取backgroundColor并使用它。

      通常,为了增强可重用性,大多数标准的Painter会忽略这个参数。因此,它们可以在任何上下文中重用。这个object可能为null。如果对象参数为null,实现不能抛出NullPointerException。

      最后,widthheight参数指定Painter应该绘制到的宽度和高度。更具体地说,指定的宽度和高度指示绘画应完全在这个宽度和高度内进行。在g参数上指定的任何剪辑将进一步限制区域。

      例如,假设我有一个绘制渐变的Painter实现。渐变从白色到黑色。它“拉伸”以填充绘制的区域。因此,如果我使用这个Painter来绘制一个500 x 500的区域,最左边将是黑色,最右边将是白色,并且之间会绘制平滑的渐变。然后,我可以不经修改地重用这个Painter来绘制一个大小为20x20的区域。这个区域也将在左侧为黑色,在右侧为白色,并且之间绘制平滑的渐变。

      参数:
      g - 要渲染的Graphics2D。这个参数不能为null。
      object - 一个可选的配置参数。这个参数可能为null。
      width - 要绘制的区域的宽度。
      height - 要绘制的区域的高度。