模块 java.desktop
 java.awt

类 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 的目标(Component Image )。此默认变换将用户空间坐标系映射到屏幕和打印机设备坐标,使得原点映射到设备目标区域的左上角,X 坐标向右延伸,Y 坐标向下延伸。对于那些接近 72 dpi 的设备,例如屏幕设备,默认变换的缩放设置为标识。对于高分辨率设备(例如打印机),默认变换的缩放比例设置为每平方英寸大约 72 个用户空间坐标。对于图像缓冲区,默认变换是 Identity 变换。

渲染过程

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

渲染过程中的步骤是:

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

三种类型的渲染操作,以及它们各自特定渲染过程的详细信息是:
  1. Shape 操作
    1. 如果操作是 draw(Shape) 操作,则使用 Graphics2D 上下文中当前 Stroke 属性的 createStrokedShape 方法构造一个新的 Shape 对象,该对象包含指定 Shape 的轮廓。
    2. Shape 使用 Graphics2D 上下文中的当前 Transform 从用户空间转换为设备空间。
    3. Shape 的轮廓是使用 ShapegetPathIterator 方法提取的,该方法返回一个沿 Shape 边界迭代的 PathIterator 对象。
    4. 如果 Graphics2D 对象无法处理 PathIterator 对象返回的曲线段,那么它可以调用 Shape 的备用 getPathIterator 方法,这会压平 Shape
    5. 查询 Graphics2D 上下文中的当前 Paint 以查找 PaintContext ,它指定要在设备空间中呈现的颜色。
  2. 文本操作
    1. 以下步骤用于确定呈现指示的 String 所需的字形集:
      1. 如果参数是 String ,则要求 Graphics2D 上下文中的当前 FontString 中的 Unicode 字符转换为一组字形,以便使用字体实现的任何基本布局和整形算法进行呈现。
      2. 如果参数是 AttributedCharacterIterator ,则要求迭代器使用其嵌入的字体属性将自身转换为 TextLayout 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
ComponentGraphicsConfigurationgetDefaultTransform
Composite
AlphaComposite.SRC_OVER 规则。
Clip
没有渲染 Clip ,输出被裁剪到 Component

渲染兼容性问题

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

Java 2D(tm)(Java(tm) 2 平台)API 支持抗锯齿渲染器。与像素 N+1 相比,宽度为一个像素的笔不需要完全落在像素 N 上。笔可以部分落在两个像素上。没有必要为宽笔选择偏置方向,因为沿着笔遍历边缘发生的混合使笔的子像素位置对用户可见。另一方面,当通过将 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,屏幕绘图的默认转换是恒等转换。

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

  • 设备坐标被定义为在设备像素之间,这避免了锯齿渲染和抗锯齿渲染之间的任何不一致结果。如果坐标被定义为位于像素的中心,则被形状(例如矩形)重写的一些像素将仅被重写一半。使用锯齿渲染,半重写像素将渲染在形状内部或形状外部。使用抗锯齿渲染,形状整个边缘上的像素将被一半重写。另一方面,由于坐标被定义为在像素之间,所以像矩形这样的形状将没有半重写像素,无论它是否使用抗锯齿进行渲染。
  • 使用 BasicStroke 对象描边的线条和路径可能会被“规范化”,以在位于可绘制对象上的不同点时以及是否使用锯齿或抗锯齿渲染绘制时提供一致的轮廓渲染。此规范化过程由 KEY_STROKE_CONTROL 提示控制。未指定确切的归一化算法,但此归一化的目标是确保线条以一致的视觉外观呈现,无论它们如何落在像素网格上,并在抗锯齿模式下促进更实心的水平和垂直线,使它们类似于他们的非抗锯齿对应物更紧密。典型的归一化步骤可能会将抗锯齿线端点提升到像素中心以减少混合量或调整非抗锯齿线的子像素定位,以便浮点线宽以相等的可能性舍入到偶数或奇数像素数。此过程最多可以将端点移动半个像素(通常沿两个轴朝向正无穷大)以促进这些一致的结果。

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

  • 对于 fill 操作,包括 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);
     
参见:
  • 构造方法详细信息

    • Graphics2D

      protected Graphics2D()
      构造一个新的 Graphics2D 对象。由于Graphics2D是一个抽象类,而且由于它必须由子类针对不同的输出设备进行定制,所以无法直接创建Graphics2D对象。相反,Graphics2D 对象必须从另一个 Graphics2D 对象获取,由 Component 创建,或者从 BufferedImage 对象等图像获取。
      参见:
  • 方法详情

    • draw3DRect

      public void draw3DRect(int x, int y, int width, int height, boolean raised)
      绘制指定矩形的 3-D 高亮轮廓。矩形的边缘被突出显示,因此它们看起来是倾斜的,并且从左上角被照亮。

      用于高亮效果的颜色是根据当前颜色确定的。生成的矩形覆盖了 width + 1 像素宽 x height + 1 像素高的区域。此方法仅使用当前的 Color 并忽略当前的 Paint

      重写:
      draw3DRect 在类 Graphics
      参数:
      x - 要绘制的矩形的 x 坐标。
      y - 要绘制的矩形的 y 坐标。
      width - 要绘制的矩形的宽度。
      height - 要绘制的矩形的高度。
      raised - 一个boolean,用于确定矩形是凸出表面还是凹入表面。
      参见:
    • fill3DRect

      public void fill3DRect(int x, int y, int width, int height, boolean raised)
      绘制一个用当前颜色填充的 3-D 高亮矩形。矩形的边缘被突出显示,因此看起来好像边缘被斜切并从左上角被照亮。用于突出显示效果和填充的颜色由当前的 Color 确定。此方法仅使用当前的 Color 并忽略当前的 Paint
      重写:
      fill3DRect 在类 Graphics
      参数:
      x - 要填充的矩形的 x 坐标。
      y - 要填充的矩形的 y 坐标。
      width - 要填充的矩形的宽度。
      height - 要填充的矩形的高度。
      raised - 一个boolean,用于确定矩形是凸出表面还是蚀刻到表面中。
      参见:
    • 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 为空,则此方法不执行任何操作。
      xform - 从图像空间到用户空间的转换
      obs - 随着更多 Image 被转换,将通知 ImageObserver
      返回:
      true 如果 Image 已完全加载并完全呈现,或者它是否为空; false 如果 Image 仍在加载。
      参见:
    • 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 为空,则此方法不执行任何操作。
      op - 渲染前应用于图像的滤镜
      x - 用户空间中图像左上角渲染位置的 x 坐标
      y - 用户空间中图像左上角渲染位置的 y 坐标
      参见:
    • drawRenderedImage

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

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

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

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

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

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

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

      第一个字符的基线在位置 (xy) 在用户空间。对于希伯来语和阿拉伯语等脚本系统中的字符,可以从右到左呈现字形,在这种情况下,提供的坐标是基线最左边字符的位置。

      指定者:
      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 为假,此方法检查指定 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 类的实例,并且如果存在安全管理器,则使用 AWTPermission("readDisplayPixels") 权限调用其 checkPermission 方法。

      参数:
      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 上下文的原点转换为点 (xy) 在当前坐标系中。修改 Graphics2D 上下文,使其新原点对应于点 (xyGraphics2D 上下文的前坐标系中。在此图形上下文上的后续渲染操作中使用的所有坐标都相对于此新原点。
      指定者:
      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 - 坐标在正 X 轴方向上移动的乘数,作为其 Y 坐标的函数
      shy - 坐标在正 Y 轴方向上移动的乘数,作为其 X 坐标的函数
    • transform

      public abstract void transform(AffineTransform  Tx)
      根据规则 last-specified-first-applied 将 AffineTransform 对象与 Graphics2D 中的 Transform 组合起来。如果当前Transform为Cx,则与Tx合成的结果为新的TransformCx'。 Cx' 成为这个 Graphics2D 的当前 Transform。用更新后的TransformCx'变换一个点p,相当于先用Tx变换p,再用原来的TransformCx变换结果。换句话说,Cx'(p) = Cx(Tx(p))。如有必要,会制作 Tx 的副本,因此对 Tx 的进一步修改不会影响渲染。
      参数:
      Tx - 要与当前 Transform 组合的 AffineTransform 对象
      参见:
    • setTransform

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

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

       // Get the current transform
       AffineTransform saveAT = g2.getTransform();
       // Perform transformation
       g2d.transform(...);
       // Render
       g2d.draw(...);
       // Restore original transform
       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 设置为生成的交集。指定的 Shape 在与当前的 Clip 相交之前用当前的 Graphics2D Transform 进行转换。该方法用于使电流Clip变小。要使 Clip 变大,请使用 setClip

      用户剪辑通过此方法修改的与设备边界和可见性相关的裁剪无关。如果之前没有设置剪辑,或者如果剪辑已使用带有null参数的setClip 清除,则指定的Shape将成为新的用户剪辑。

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

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

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