Module java.desktop
Package java.awt

Class Graphics2D

java.lang.Object
java.awt.Graphics
java.awt.Graphics2D

public abstract class Graphics2D extends Graphics
这个Graphics2D类扩展了Graphics类,提供了更复杂的几何控制、坐标转换、颜色管理和文本布局。这是在Java(tm)平台上渲染二维形状、文本和图像的基本类。

坐标空间

传递给Graphics2D对象的所有坐标都是在一个称为用户空间的与设备无关的坐标系统中指定的,应用程序使用这个坐标系统。 Graphics2D对象包含一个AffineTransform对象作为其渲染状态的一部分,该对象定义了如何将用户空间中的坐标转换为设备相关坐标中的设备空间。

设备空间中的坐标通常指的是单个设备像素,并且对齐在这些像素之间的无限薄间隙上。一些Graphics2D对象可用于捕获渲染操作,以便在以后的某个时间在未知物理分辨率的具体设备上播放图形元文件。由于在捕获渲染操作时可能不知道分辨率,因此Graphics2D Transform被设置为将用户坐标转换为近似目标设备分辨率的虚拟设备空间。如果估计不正确,则可能需要在播放时应用进一步的转换。

渲染属性对象执行的一些操作发生在设备空间中,但所有Graphics2D方法都采用用户空间坐标。

每个Graphics2D对象都与一个目标关联,该目标定义了渲染发生的位置。 GraphicsConfiguration对象定义了渲染目标的特性,例如像素格式和分辨率。在Graphics2D对象的整个生命周期中都使用相同的渲染目标。

创建Graphics2D对象时,GraphicsConfiguration指定了Graphics2D目标(默认变换)的默认变换(ComponentImage)。此默认变换将用户空间坐标系映射到屏幕和打印机设备坐标,使原点映射到设备目标区域的左上角,X坐标增加向右延伸,Y坐标增加向下延伸。对于接近72 dpi的设备(如屏幕设备),默认变换的缩放设置为标识。对于高分辨率设备(如打印机),默认变换的缩放设置为每平方英寸大约72个用户空间坐标。对于图像缓冲区,默认变换是Identity变换。

渲染过程

渲染过程可以分为四个阶段,由Graphics2D渲染属性控制。渲染器可以优化这些步骤中的许多步骤,要么通过缓存结果以供将来调用,要么通过将多个虚拟步骤合并为单个操作,要么通过识别各种属性作为可以通过修改操作的其他部分消除的常见简单情况。

渲染过程中的步骤包括:

  1. 确定要渲染的内容。
  2. 将渲染操作限制在当前的Clip中。 Clip由用户空间中的一个Shape指定,并由使用GraphicsGraphics2D的各种剪切操作方法的程序控制。这个用户剪切通过当前的Transform转换为设备空间,并与设备剪切组合,后者由窗口的可见性和设备范围定义。用户剪切和设备剪切的组合定义了复合剪切,它确定了最终的剪切区域。用户剪切不会被渲染系统修改以反映生成的复合剪切。
  3. 确定要渲染的颜色。
  4. 使用Graphics2D上下文中当前的Composite属性将颜色应用于目标绘图表面。

三种渲染操作类型,以及每种操作的特定渲染过程的详细信息是:
  1. Shape操作
    1. 如果操作是draw(Shape)操作,则使用当前Graphics2D上下文中的Stroke属性的createStrokedShape方法来构造一个包含指定Shape轮廓的新Shape对象。
    2. 使用Graphics2D上下文中的当前TransformShape从用户空间转换为设备空间。
    3. 使用ShapegetPathIterator方法提取Shape的轮廓,该方法返回一个PathIterator对象,该对象沿着Shape的边界迭代。
    4. 如果Graphics2D对象无法处理PathIterator对象返回的曲线段,则可以调用Shape的替代getPathIterator方法,该方法将Shape展平。
    5. 查询Graphics2D上下文中的当前Paint以获取PaintContext,该上下文指定设备空间中要渲染的颜色。
  2. 文本操作
    1. 用于确定呈现指定String所需的字形集的步骤如下:
      1. 如果参数是String,则会询问Graphics2D上下文中的当前FontString中的Unicode字符转换为一组字形,以便使用字体实现的任何基本布局和形状算法进行呈现。
      2. 如果参数是AttributedCharacterIterator,则会要求迭代器使用其嵌入的字体属性将自身转换为TextLayout,该布局使用更复杂的字形布局算法,自动执行多个具有不同书写方向的字体的Unicode双向布局调整。
      3. 如果参数是GlyphVector,则GlyphVector对象已经包含了适当的特定于字体的字形代码,并且每个字形的位置的显式坐标。
    2. 查询当前Font以获取指定字形的轮廓。这些轮廓被视为用户空间中相对于第1步确定的每个字形位置的形状。
    3. 如上所述在Shape操作下填充字符轮廓。
    4. 查询当前Paint以获取PaintContext,该上下文指定设备空间中要渲染的颜色。
  3. Image操作
    1. 感兴趣的区域由源Image的边界框定义。此边界框在图像空间中指定,这是Image对象的本地坐标系。
    2. 如果将AffineTransform传递给drawImage(Image, AffineTransform, ImageObserver),则使用AffineTransform将边界框从图像空间转换为用户空间。如果未提供AffineTransform,则边界框被视为已经在用户空间中。
    3. 使用当前Transform将源Image的边界框从用户空间转换为设备空间。请注意,转换边界框的结果不一定会在设备空间中产生矩形区域。
    4. Image对象根据当前Transform和可选图像变换指定的源到目标坐标映射对颜色进行采样以确定要渲染的颜色。

默认渲染属性

Graphics2D渲染属性的默认值为:
Paint
Component的颜色。
Font
ComponentFont
Stroke
一个线宽为1的方形笔,无虚线,斜接段连接和方形端点。
Transform
ComponentGraphicsConfiguration的默认变换
Composite
AlphaComposite.SRC_OVER规则。
Clip
没有渲染Clip,输出被剪切到Component

渲染兼容性问题

JDK(tm) 1.1渲染模型基于一个像素化模型,该模型指定坐标是无限薄的,位于像素之间。绘图操作使用一个一像素宽的笔进行,填充路径上锚点下方和右侧的像素。JDK 1.1渲染模型与大多数现有平台渲染器类的功能一致,这些渲染器需要将整数坐标解析为必须完全落在指定数量的像素上的离散笔。

Java 2D(tm) (Java(tm) 2 platform) API支持抗锯齿渲染器。宽度为一个像素的笔不需要完全落在像素N上,而不是像素N+1上。笔可以部分落在两个像素上。对于宽笔,不需要选择偏向方向,因为沿着笔遍历边缘发生的混合使得用户能够看到笔的亚像素位置。另一方面,当通过将KEY_ANTIALIASING提示键设置为VALUE_ANTIALIAS_OFF提示值来关闭抗锯齿时,渲染器可能需要应用偏移来确定笔跨越像素边界时要修改哪个像素,例如当在设备空间中沿整数坐标绘制时。尽管抗锯齿渲染器的功能使得不再需要为笔指定偏向,但希望抗锯齿和非抗锯齿渲染器在屏幕上绘制一像素宽的水平和垂直线的常见情况下表现类似。为确保通过将KEY_ANTIALIASING提示键设置为VALUE_ANTIALIAS_ON不会导致这些线突然变宽一倍且半透明度减半,希望模型为这些线指定路径,使其完全覆盖特定像素集以增加其清晰度。

Java 2D API保持与JDK 1.1渲染行为的兼容性,使得在Java 2D API下,传统操作和现有渲染器行为保持不变。定义了映射到一般drawfill方法的传统方法,清楚地指示了Graphics2D如何基于StrokeTransform属性以及渲染提示进行扩展Graphics。在默认属性设置下,定义的行为表现相同。例如,默认Stroke是宽度为1且没有虚线的BasicStroke,屏幕绘制的默认Transform是一个恒等变换。

以下两条规则提供了可预测的渲染行为,无论是使用锯齿还是抗锯齿。

  • 设备坐标被定义为在设备像素之间,避免了在锯齿和抗锯齿渲染之间产生不一致的结果。如果将坐标定义为像素的中心,某些形状(如矩形)覆盖的一些像素将只被覆盖一半。在锯齿渲染中,被覆盖一半的像素要么在形状内部绘制,要么在形状外部绘制。在抗锯齿渲染中,整个形状边缘的像素将被覆盖一半。另一方面,由于坐标被定义为在像素之间,像矩形这样的形状不会有一半被覆盖的像素,无论是使用抗锯齿渲染还是不使用。
  • 使用BasicStroke对象描边的线条和路径可以被“标准化”,以便在绘制到可绘制物的各个点时,无论是使用锯齿还是抗锯齿渲染,都能提供一致的轮廓渲染。这个标准化过程由KEY_STROKE_CONTROL提示控制。具体的标准化算法没有指定,但这种标准化的目标是确保线条以一致的视觉外观呈现,无论它们如何落在像素网格上,并促进抗锯齿模式下更加坚实的水平和垂直线条,使其更接近非抗锯齿模式下的对应线条。一个典型的标准化步骤可能会将抗锯齿线条端点提升到像素中心,以减少混合的数量,或者调整非抗锯齿线条的亚像素定位,使得浮点线宽以等概率四舍五入为偶数或奇数像素计数。这个过程可以将端点移动多达半个像素(通常沿着两个轴向正无穷大方向)以促进这些一致的结果。

以下一般传统方法的定义在默认属性设置下表现与先前指定的行为相同:

  • 对于填充操作,包括fillRectfillRoundRectfillOvalfillArcfillPolygonclearRect,现在可以使用所需的Shape调用fill。例如,填充矩形时:
     fill(new Rectangle(x, y, w, h));
     
    被调用。
  • 类似地,对于绘制操作,包括drawLinedrawRectdrawRoundRectdrawOvaldrawArcdrawPolylinedrawPolygon,现在可以使用所需的Shape调用draw。例如,绘制矩形时:
     draw(new Rectangle(x, y, w, h));
     
    被调用。
  • draw3DRectfill3DRect方法是在Graphics类中以drawLinefillRect方法的形式实现的,这将根据Graphics2D上下文中当前的StrokePaint对象来预测它们的行为。这个类覆盖了那些使用当前Color独占的实现版本,覆盖了当前Paint并使用fillRect来描述与预先存在的方法完全相同的行为,无论当前Stroke的设置如何。
Graphics类仅定义了setColor方法来控制要绘制的颜色。由于Java 2D API扩展了Color对象以实现新的Paint接口,现有的setColor方法现在是一个设置当前Paint属性为Color对象的便利方法。setColor(c)等同于setPaint(c)

Graphics类定义了两种控制颜色应用于目标的方法。

  1. setPaintMode方法被实现为一个设置默认Composite的便利方法,等同于setComposite(new AlphaComposite.SrcOver)
  2. setXORMode(Color xorcolor)方法被实现为一个设置特殊Composite对象的便利方法,该对象忽略源颜色的Alpha组件,并将目标颜色设置为值:
     dstpixel = (PixelOf(srccolor) ^ PixelOf(xorcolor) ^ dstpixel);
     
参见:
  • Constructor Details

    • Graphics2D

      protected Graphics2D()
      构造一个新的Graphics2D对象。由于Graphics2D是一个抽象类,并且必须由子类为不同的输出设备进行定制,因此不能直接创建Graphics2D对象。相反,必须从另一个Graphics2D对象中获取Graphics2D对象,由Component创建,或者从诸如BufferedImage对象中获取。
      参见:
  • Method Details

    • draw3DRect

      public void draw3DRect(int x, int y, int width, int height, boolean raised)
      绘制指定矩形的3D突出轮廓。矩形的边缘被突出显示,使其看起来像是从左上角被倒角和照亮。

      用于突出显示效果的颜色是基于当前颜色确定的。结果矩形覆盖的区域宽度为width + 1像素,高度为height + 1像素。此方法仅使用当前Color,忽略当前Paint

      覆盖:
      draw3DRect 在类中 Graphics
      参数:
      x - 要绘制的矩形的x坐标。
      y - 要绘制的矩形的y坐标。
      width - 要绘制的矩形的宽度。
      height - 要绘制的矩形的高度。
      raised - 一个布尔值,确定矩形是凸起还是凹陷。
      参见:
    • fill3DRect

      public void fill3DRect(int x, int y, int width, int height, boolean raised)
      绘制填充有当前颜色的3D突出矩形。矩形的边缘被突出显示,使其看起来像是从左上角被倒角和照亮。用于突出显示效果和填充的颜色是根据当前Color确定的。此方法仅使用当前Color,忽略当前Paint
      覆盖:
      fill3DRect 在类中 Graphics
      参数:
      x - 要填充的矩形的x坐标。
      y - 要填充的矩形的y坐标。
      width - 要填充的矩形的宽度。
      height - 要填充的矩形的高度。
      raised - 一个布尔值,确定矩形是凸起还是凹陷。
      参见:
    • draw

      public abstract void draw(Shape s)
      使用当前Graphics2D上下文的设置对Shape的轮廓进行描边。应用的渲染属性包括ClipTransformPaintCompositeStroke属性。
      参数:
      s - 要渲染的Shape
      参见:
    • drawImage

      public abstract boolean drawImage(Image img, AffineTransform xform, ImageObserver obs)
      渲染图像,应用从图像空间到用户空间的变换后再绘制。从用户空间到设备空间的转换使用Graphics2D中的当前Transform完成。在应用Graphics2D上下文中的变换属性之前,将指定的变换应用于图像。应用的渲染属性包括ClipTransformComposite属性。请注意,如果指定的变换不可逆,则不会进行渲染。
      参数:
      img - 要呈现的指定图像。如果img为null,则此方法不执行任何操作。
      xform - 从图像空间到用户空间的转换
      obs - 要通知的ImageObserver,随着更多的Image被转换,通知它
      返回:
      如果Image完全加载并完全呈现,或者为null,则返回true; 如果Image仍在加载中,则返回false
      参见:
    • drawImage

      public abstract void drawImage(BufferedImage img, BufferedImageOp op, int x, int y)
      渲染一个使用BufferedImageOp过滤的BufferedImage。应用的渲染属性包括ClipTransformComposite属性。这相当于:
       img1 = op.filter(img, null);
       drawImage(img1, new AffineTransform(1f,0f,0f,1f,x,y), null);
       
      参数:
      img - 要呈现的指定BufferedImage。如果img为null,则此方法不执行任何操作。
      op - 在呈现之前应用于图像的滤镜
      x - 用户空间中要呈现图像左上角的位置的x坐标
      y - 用户空间中要呈现图像左上角的位置的y坐标
      参见:
    • drawRenderedImage

      public abstract void drawRenderedImage(RenderedImage img, AffineTransform xform)
      渲染一个RenderedImage,在绘制之前应用从图像空间到用户空间的转换。从用户空间到设备空间的转换是使用Graphics2D中当前Transform完成的。指定的转换应用于图像,然后应用Graphics2D上下文中的转换属性。应用的渲染属性包括ClipTransformComposite属性。请注意,如果指定的转换不可逆,则不会进行任何渲染。
      参数:
      img - 要呈现的图像。如果img为null,则此方法不执行任何操作。
      xform - 从图像空间到用户空间的转换
      参见:
    • drawRenderableImage

      public abstract void drawRenderableImage(RenderableImage img, AffineTransform xform)
      渲染一个RenderableImage,在绘制之前应用从图像空间到用户空间的转换。从用户空间到设备空间的转换是使用Graphics2D中当前Transform完成的。指定的转换应用于图像,然后应用Graphics2D上下文中的转换属性。应用的渲染属性包括ClipTransformComposite属性。请注意,如果指定的转换不可逆,则不会进行任何渲染。

      Graphics2D对象上设置的渲染提示可能会在渲染RenderableImage时使用。如果需要对特定RenderableImage识别的特定提示进行显式控制,或者需要了解使用了哪些提示,则应直接从RenderableImage获取RenderedImage,并使用drawRenderedImage进行呈现。

      参数:
      img - 要呈现的图像。如果img为null,则此方法不执行任何操作。
      xform - 从图像空间到用户空间的转换
      参见:
    • drawString

      public abstract void drawString(String str, int x, int y)
      渲染指定String的文本,使用Graphics2D上下文中的当前文本属性状态。第一个字符的基线位于用户空间中的位置(x, y)。应用的渲染属性包括ClipTransformPaintFontComposite属性。对于希伯来语和阿拉伯语等脚本系统中的字符,可以从右向左呈现字形,此时提供的坐标是基线上最左侧字符的位置。
      在类中由:
      drawString in class Graphics
      参数:
      str - 要呈现的字符串
      x - String应呈现的位置的x坐标
      y - String应呈现的位置的y坐标
      抛出:
      NullPointerException - 如果strnull
      自:
      1.0
      参见:
    • drawString

      public abstract void drawString(String str, float x, float y)
      渲染由指定String指定的文本,使用Graphics2D上下文中的当前文本属性状态。第一个字符的基线位于用户空间中的位置(x, y)。应用的渲染属性包括ClipTransformPaintFontComposite属性。对于希伯来语和阿拉伯语等脚本系统中的字符,可以从右向左呈现字形,此时提供的坐标是基线上最左侧字符的位置。
      参数:
      str - 要呈现的String
      x - String应呈现的位置的x坐标
      y - String应呈现的位置的y坐标
      抛出:
      NullPointerException - 如果strnull
      参见:
    • drawString

      public abstract void drawString(AttributedCharacterIterator iterator, int x, int y)
      渲染由指定迭代器指定的文本,根据TextAttribute类的规范应用其属性。

      第一个字符的基线位于用户空间中的位置(x, y)。对于希伯来语和阿拉伯语等脚本系统中的字符,可以从右向左呈现字形,此时提供的坐标是基线上最左侧字符的位置。

      指定者:
      drawString 在类 Graphics
      参数:
      iterator - 要呈现其文本的迭代器
      x - 要呈现迭代器文本的x坐标
      y - 要呈现迭代器文本的y坐标
      抛出:
      NullPointerException - 如果iteratornull
      参见:
    • drawString

      public abstract void drawString(AttributedCharacterIterator iterator, float x, float y)
      使用TextAttribute类的规范应用指定迭代器的文本。

      第一个字符的基线位于用户空间中的位置(xy)。对于希伯来语和阿拉伯语等脚本系统中的字符,可以从右向左呈现字形,此时提供的坐标是基线上最左侧字符的位置。

      参数:
      iterator - 要呈现其文本的迭代器
      x - 要呈现迭代器文本的x坐标
      y - 要呈现迭代器文本的y坐标
      抛出:
      NullPointerException - 如果iteratornull
      参见:
    • drawGlyphVector

      public abstract void drawGlyphVector(GlyphVector g, float x, float y)
      使用Graphics2D上下文的呈现属性呈现指定GlyphVector的文本。 应用的呈现属性包括ClipTransformPaintComposite属性。 GlyphVector指定来自Font的单个字形。 GlyphVector还可以包含字形位置。 这是将一组字符快速呈现到屏幕上的最快方法。
      参数:
      g - 要呈现的GlyphVector
      x - 要呈现字形的用户空间中的x位置
      y - 要呈现字形的用户空间中的y位置
      抛出:
      NullPointerException - 如果gnull
      参见:
    • fill

      public abstract void fill(Shape s)
      使用Graphics2D上下文的设置填充Shape的内部。 应用的呈现属性包括ClipTransformPaintComposite
      参数:
      s - 要填充的Shape
      参见:
    • hit

      public abstract boolean hit(Rectangle rect, Shape s, boolean onStroke)
      检查指定的Shape是否与指定的设备空间中的Rectangle相交。 如果onStroke为false,则此方法检查指定Shape的内部是否与指定的Rectangle相交。 如果onStroketrue,则此方法检查指定Shape的轮廓的Stroke是否与指定的Rectangle相交。 考虑的呈现属性包括ClipTransformStroke属性。
      参数:
      rect - 要检查是否命中的设备空间中的区域
      s - 要检查是否命中的Shape
      onStroke - 用于选择测试描边形状还是填充形状的标志。 如果标志为true,则测试Stroke轮廓。 如果标志为false,则测试填充的Shape
      返回:
      如果命中则为true; 否则为false
      参见:
    • getDeviceConfiguration

      public abstract GraphicsConfiguration getDeviceConfiguration()
      返回与此Graphics2D关联的设备配置。
      返回:
      Graphics2D的设备配置。
    • setComposite

      public abstract void setComposite(Composite comp)
      设置Graphics2D上下文的CompositeComposite用于所有绘图方法,如drawImagedrawStringdrawfill。 它指定在呈现过程中如何将新像素与图形设备上的现有像素组合。

      如果此Graphics2D上下文正在向显示屏上的Component绘图,并且Composite是自定义对象而不是AlphaComposite类的实例,并且存在安全管理器,则将调用其checkPermission方法,该方法具有AWTPermission("readDisplayPixels")权限。

      参数:
      comp - 用于呈现的Composite对象
      抛出:
      SecurityException - 如果正在使用自定义Composite对象进行屏幕呈现,并且设置了安全管理器且其checkPermission方法不允许该操作。
      参见:
    • setPaint

      public abstract void setPaint(Paint paint)
      设置Graphics2D上下文的Paint属性。 使用null Paint对象调用此方法不会对此Graphics2D的当前Paint属性产生任何影响。
      参数:
      paint - 用于在呈现过程中生成颜色的Paint对象,或null
      参见:
    • setStroke

      public abstract void setStroke(Stroke s)
      设置Graphics2D上下文的Stroke
      参数:
      s - 在渲染过程中用于描边ShapeStroke对象
      参见:
    • setRenderingHint

      public abstract void setRenderingHint(RenderingHints.Key hintKey, Object hintValue)
      设置渲染算法的单个偏好设置值。提示类别包括控制渲染质量和渲染过程中整体时间/质量权衡的控制。请参考RenderingHints类以获取一些常见键和值的定义。
      参数:
      hintKey - 要设置的提示的键。
      hintValue - 表示指定提示类别的偏好设置值。
      参见:
    • getRenderingHint

      public abstract Object getRenderingHint(RenderingHints.Key hintKey)
      返回渲染算法的单个偏好设置值。提示类别包括控制渲染质量和渲染过程中整体时间/质量权衡的控制。请参考RenderingHints类以获取一些常见键和值的定义。
      参数:
      hintKey - 对应要获取的提示的键。
      返回:
      表示指定提示键的值的对象。一些键及其关联值在RenderingHints类中有定义。
      参见:
    • setRenderingHints

      public abstract void setRenderingHints(Map<?,?> hints)
      用指定的hints替换渲染算法的所有偏好设置值。所有渲染提示的现有值都将被丢弃,并且新的已知提示和值集将从指定的Map对象初始化。提示类别包括控制渲染质量和渲染过程中整体时间/质量权衡的控制。请参考RenderingHints类以获取一些常见键和值的定义。
      参数:
      hints - 要设置的渲染提示
      参见:
    • addRenderingHints

      public abstract void addRenderingHints(Map<?,?> hints)
      设置任意数量的渲染算法偏好设置值。仅修改指定Map对象中存在的渲染提示的值。所有其他未在指定对象中出现的偏好设置将保持不变。提示类别包括控制渲染质量和渲染过程中整体时间/质量权衡的控制。请参考RenderingHints类以获取一些常见键和值的定义。
      参数:
      hints - 要设置的渲染提示
      参见:
    • getRenderingHints

      public abstract RenderingHints getRenderingHints()
      获取渲染算法的偏好设置。提示类别包括控制渲染质量和渲染过程中整体时间/质量权衡的控制。返回一次性指定的所有提示键/值对。请参考RenderingHints类以获取一些常见键和值的定义。
      返回:
      包含当前偏好设置的RenderingHints实例的引用。
      参见:
    • translate

      public abstract void translate(int x, int y)
      Graphics2D上下文的原点平移到当前坐标系中的点(x, y)。修改Graphics2D上下文,使其新原点对应于Graphics2D上下文以前坐标系中的点(x, y)。在此图形上下文上的后续渲染操作中使用的所有坐标都是相对于这个新原点的。
      指定者:
      translate 在类 Graphics
      参数:
      x - 指定的x坐标
      y - 指定的y坐标
      自:
      1.0
    • translate

      public abstract void translate(double tx, double ty)
      将当前Graphics2D Transform与平移变换连接起来。后续渲染相对于先前位置被指定的距离平移。这相当于调用transform(T),其中T是由以下矩阵表示的AffineTransform
                [   1    0    tx  ]
                [   0    1    ty  ]
                [   0    0    1   ]
       
      参数:
      tx - 沿x轴平移的距离
      ty - 沿y轴平移的距离
    • rotate

      public abstract void rotate(double theta)
      将当前Graphics2D Transform与旋转变换连接起来。后续渲染相对于先前原点按指定弧度旋转。这相当于调用transform(R),其中R是由以下矩阵表示的AffineTransform
                [   cos(theta)    -sin(theta)    0   ]
                [   sin(theta)     cos(theta)    0   ]
                [       0              0         1   ]
       
      以正角度theta旋转将正x轴上的点旋转到正y轴上。
      参数:
      theta - 弧度中的旋转角度
    • rotate

      public abstract void rotate(double theta, double x, double y)
      将当前Graphics2D Transform与平移旋转变换连接起来。后续渲染将通过一个变换进行,该变换由移动到指定位置、按指定弧度旋转,然后再按原始平移量返回构建而成。这相当于以下一系列调用:
                translate(x, y);
                rotate(theta);
                translate(-x, -y);
       
      以正角度theta旋转将正x轴上的点旋转到正y轴上。
      参数:
      theta - 弧度中的旋转角度
      x - 旋转原点的x坐标
      y - 旋转原点的y坐标
    • scale

      public abstract void scale(double sx, double sy)
      将当前Graphics2D Transform与缩放变换连接起来。后续渲染根据指定的缩放因子相对于先前缩放进行调整。这相当于调用transform(S),其中S是由以下矩阵表示的AffineTransform
                [   sx   0    0   ]
                [   0    sy   0   ]
                [   0    0    1   ]
       
      参数:
      sx - X坐标在后续渲染操作中相对于先前渲染操作要乘以的量。
      sy - Y坐标在后续渲染操作中相对于先前渲染操作要乘以的量。
    • shear

      public abstract void shear(double shx, double shy)
      将当前Graphics2D Transform与错切变换连接起来。后续渲染相对于先前位置按指定倍数错切。这相当于调用transform(SH),其中SH是由以下矩阵表示的AffineTransform
                [   1   shx   0   ]
                [  shy   1    0   ]
                [   0    0    1   ]
       
      参数:
      shx - 根据Y坐标的函数,坐标在正X轴方向上移动的倍数
      shy - 根据X坐标的函数,坐标在正Y轴方向上移动的倍数
    • transform

      public abstract void transform(AffineTransform Tx)
      根据最后指定的先应用规则,将AffineTransform对象与此Graphics2D中的Transform组合。如果当前Transform为Cx,则与Tx组合的结果是一个新的Transform Cx'。Cx'成为此Graphics2D的当前Transform。通过更新的Transform Cx'转换点p等同于首先通过Tx转换p,然后通过原始Transform Cx转换结果。换句话说,Cx'(p) = Cx(Tx(p))。如有必要,将复制Tx,以便进一步修改Tx不会影响渲染。
      参数:
      Tx - 要与当前Transform组合的AffineTransform对象
      参见:
    • setTransform

      public abstract void setTransform(AffineTransform Tx)
      覆盖Graphics2D上下文中的Transform。警告:此方法不应该用于在现有Transform之上应用新的坐标变换,因为Graphics2D可能已经有其他用途所需的Transform,例如渲染Swing组件或应用缩放变换以调整打印机的分辨率。

      要添加坐标变换,请使用transformrotatescaleshear方法。setTransform方法仅用于在渲染后恢复原始Graphics2D变换,如下例所示:

       // 获取当前变换
       AffineTransform saveAT = g2.getTransform();
       // 执行变换
       g2d.transform(...);
       // 渲染
       g2d.draw(...);
       // 恢复原始变换
       g2d.setTransform(saveAT);
       
      参数:
      Tx - 从getTransform方法检索到的AffineTransform
      参见:
    • getTransform

      public abstract AffineTransform getTransform()
      返回Graphics2D上下文中当前Transform的副本。
      返回:
      Graphics2D上下文中当前的AffineTransform
      参见:
    • getPaint

      public abstract Paint getPaint()
      返回Graphics2D上下文中当前的Paint
      返回:
      当前Graphics2D Paint,定义了颜色或图案。
      参见:
    • getComposite

      public abstract Composite getComposite()
      返回Graphics2D上下文中当前的Composite
      返回:
      当前Graphics2D Composite,定义了混合样式。
      参见:
    • setBackground

      public abstract void setBackground(Color color)
      设置Graphics2D上下文的背景颜色。背景颜色用于清除区域。当为Component构造Graphics2D时,背景颜色从Component继承。仅影响Graphics2D上下文中后续的clearRect调用,而不影响Component的背景颜色。要更改Component的背景,请使用Component的适当方法。
      参数:
      color - 用于后续调用clearRect的背景颜色
      参见:
    • getBackground

      public abstract Color getBackground()
      返回用于清除区域的背景颜色。
      返回:
      当前Graphics2D Color,定义了背景颜色。
      参见:
    • getStroke

      public abstract Stroke getStroke()
      返回Graphics2D上下文中当前的Stroke
      返回:
      当前Graphics2D Stroke,定义了线条样式。
      参见:
    • clip

      public abstract void clip(Shape s)
      将当前Clip与指定Shape的内部相交,并将Clip设置为结果的交集。在与当前Clip相交之前,指定的Shape将使用当前Graphics2D Transform进行转换。此方法用于使当前Clip变小。要使Clip变大,请使用setClip

      此方法修改的用户剪辑独立于与设备边界和可见性相关联的剪辑。如果之前未设置剪辑,或者使用null参数清除了剪辑,则指定的Shape将成为新的用户剪辑。

      由于此方法将指定的形状与当前剪辑相交,因此对于null形状,除非用户剪辑也为null,否则将抛出NullPointerException。因此,不建议使用null参数调用此方法。

      参数:
      s - 与当前Clip相交的Shape。此方法更新当前Clip
      抛出:
      NullPointerException - 如果snull且当前设置了用户剪辑。
    • getFontRenderContext

      public abstract FontRenderContext getFontRenderContext()
      获取Graphics2D上下文中Font的渲染上下文。 FontRenderContext封装了应用程序提示,如抗锯齿和分数度量,以及目标设备特定信息,如每英寸点数。当使用执行排版格式化的对象时,例如FontTextLayout,应用程序应提供此信息。当应用程序执行自己的布局并需要各种字形特征的准确测量时,例如前进和行高,应提供此信息,当应用了各种呈现提示时。
      返回:
      指向FontRenderContext实例的引用。
      自:
      1.2
      参见: