此
Graphics2D
类扩展
Graphics
类,以提供对几何形状、坐标转换、颜色管理和文本布局更为复杂的控制。它是用于在 Java(tm) 平台上呈现二维形状、文本和图像的基础类。
所有传递到
Graphics2D
对象的坐标都在一个与设备无关并且名为用户空间的坐标系中指定,用户空间由应用程序使用。
Graphics2D
对象包含一个
AffineTransform
对象作为其呈现状态的一部分,后者定义了如何将坐标从用户空间转换到设备空间中与设备有关的坐标。
设备空间中的坐标通常是指单个设备像素,并根据这些像素之间无限小的间距对齐。某些
Graphics2D
对象可用于捕获对存储器的呈现操作并存入图形元文件,以后可在未知物理分辨率的具体设备上重放。由于在捕获呈现操作时分辨率可能未知,所以
Graphics2D
Transform
的设置可将用户坐标转换为虚拟设备空间,该设备空间与目标设备的预期分辨率接近。如果估计值不正确,则在重放时可能需要进一步转换。
某些由呈现属性对象执行的操作发生在设备空间中,但所有
Graphics2D
方法都采用用户空间坐标。
每个
Graphics2D
对象都与一个定义呈现位置的目标关联。
GraphicsConfiguration
对象定义呈现目标的特征,如像素格式和分辨率。在
Graphics2D
对象的整个生命周期中都使用相同的呈现目标。
创建
Graphics2D
对象时,
GraphicsConfiguration
将为
Graphics2D
的目标(
Component
或
Image
)指定
默认转换
,此默认转换将用户空间坐标系映射到屏幕和打印机设备坐标,使原点映射到设备目标区域的左上角,并将 X 坐标轴向右方延伸,将 Y 坐标轴向下方延伸。对于接近 72 dpi 的设备(例如屏幕设备),默认转换的缩放比例设置为 1:1。对于高分辨率设备(例如打印机),默认转换的缩放比例设置为每平方英寸大约 72 个用户空间坐标。对于图像缓冲区,默认转换为
Identity
转换。
呈现过程可以分为四个阶段,这四个阶段由
Graphics2D
呈现属性控制。呈现器可以优化当中的许多步骤:可以缓存结果以用于未来调用;可以将多个虚拟步骤合成一个操作;可以将多种属性识别为共用的简单情况(可以通过修改操作的其他部分来消除各种属性间的差别)。
呈现过程中的步骤有:
确定呈现内容。
将呈现操作限制在当前
Clip
。
Clip
由用户空间中的
Shape
指定,由使用
Graphics
和
Graphics2D
中各种 clip 操作方法的程序控制。此
用户剪贴区
由当前
Transform
转换到设备空间中,并与
设备剪贴区
合并,后者是通过窗口可见性和设备范围定义的。用户剪贴区和设备剪贴区的组合定义
复合剪贴区
,复合剪贴区确定最终的剪贴区域。呈现系统不能修改用户剪贴区来反映得到的复合剪贴区。
确定呈现的颜色。
使用
Graphics2D
上下文中当前的
Composite
属性将颜色应用于目标绘图面。
三种类型的呈现操作,以及各自特殊呈现过程的细节如下:
Shape
操作
如果该操作为
draw(Shape)
操作,则
Graphics2D
上下文中当前
Stroke
属性上的
createStrokedShape
方法将用于构造包含指定
Shape
轮廓的新
Shape
对象。
使用
Graphics2D
上下文中的当前
Transform
将
Shape
从用户空间转换到设备空间。
Shape
的轮廓是通过使用
Shape
的
getPathIterator
方法提取的,该方法返回一个沿着
Shape
边界迭代得到的
PathIterator
对象。
如果
Graphics2D
对象无法处理
PathIterator
对象返回的曲线段,则可以调用
Shape
的
getPathIterator
替代方法,该方法可使
Shape
变得平滑。
对于
PaintContext
,需要
Graphics2D
上下文中的当前
Paint
,它指定了在设备空间中呈现的颜色。
以下步骤用于确定呈现指定
String
所需的字形集:
如果参数是
String
,则要求
Graphics2D
上下文中的当前
Font
将
String
中的 Unicode 字符转换为一个字形集,以表现 Font 实现的基本布局和成形算法。
如果参数是
AttributedCharacterIterator
,则要求迭代器使用其内嵌的字体属性将其自身转换为
TextLayout
。
TextLayout
实现更为复杂的字形布局算法,用于为不同书写方向的多种字体自动执行 Unicode 双方向布局调整。
如果参数是
GlyphVector
,则
GlyphVector
对象已经包含了特定于字体的合适字形代码和每个字形位置的显式坐标。
查询当前的
Font
以获取指定字形的轮廓。这些轮廓被视为用户空间中相对于步骤 1 中确定的每个字形位置的形状。
字符轮廓按上面
Shape
操作
下指示的方式填充。
查询当前
PaintContext
以获取
Paint
,Paint 指定了设备空间中呈现的颜色。
Image
操作
感兴趣区域由源
Image
的边界框定义。此边界框在图像空间中指定,该空间即
Image
对象的本地坐标系。
如果
AffineTransform
被传递到
drawImage(Image, AffineTransform, ImageObserver)
,则使用
AffineTransform
将边界框从图像空间转换到用户空间。如果未提供
AffineTransform
,则认为边界框已存在于用户空间中。
使用当前
Transform
将
Image
的边界框从用户空间转换到设备空间。注意,转换边界框的结果不一定会得到设备空间中的矩形区域。
Image
对象确定要呈现的颜色,并根据当前
Transform
和可选图像转换所指定的源到目标坐标映射关系进行采样。
默认呈现属性
Graphics2D
呈现属性的默认值有:
Paint
Component
的颜色。
Component
的
Font
。
Stroke
线宽为 1 的方形画笔,没有虚线、斜角线段接合和方形端点。
Transform
用于
Component
的
GraphicsConfiguration
的
getDefaultTransform
。
Composite
AlphaComposite.SRC_OVER
规则。
不呈现
Clip
,输出局限于
Component
。
呈现兼容性问题
JDK(tm) 1.1 呈现模型是基于像素化的模型,该模型的坐标无限细分,且位于像素之间。使用一个一像素宽的画笔执行绘制操作,填充路径锚点向下和向右的像素。JDK 1.1 呈现模型与大多数现有平台呈现类的功能一致,需要将整数坐标解析为离散的画笔,使其完全落在指定的像素成员上。
Java 2D(tm)(Java(tm) 2 平台)API 支持抗锯齿呈现器。一像素宽的画笔不需要完全落在像素 N 或像素 N+1 上。该画笔可以部分落在这两个像素上。不需要为宽画笔选择一个偏离方向,因为沿画笔遍历边缘发生的混合可让画笔的子像素位置对用户可见。另一方面,如果通过将
KEY_ANTIALIASING
提示键设置为
VALUE_ANTIALIAS_OFF
提示值而关闭了抗锯齿,则当画笔跨在像素边界上时,呈现器可能需要应用偏离来确定要修改哪个像素,例如在设备空间中,当画笔沿着整数坐标绘制时。虽然抗锯齿呈现器的功能使之不再需要呈现模型为画笔指定一个偏离,但对于在屏幕上绘制一像素宽的水平线和垂直线这种常见情形,还是需要抗锯齿和非抗锯齿呈现器执行类似的操作。为了确保通过将
KEY_ANTIALIASING
提示键设置为
VALUE_ANTIALIAS_ON
而打开的抗锯齿不会导致这些线突然变为此宽度的二倍或一半不透明,需要让该模型为这些线指定一个路径,使它们完全覆盖特定的像素集,以帮助提高其平滑性。
Java 2D API 维持与 JDK 1.1 呈现行为的兼容性,遗留操作和现有呈现器行为在 Java 2D API 下没有改变。定义了映射到常规
draw
和
fill
方法的遗留方法,它明确指示
Graphics2D
根据
Stroke
和
Transform
属性以及呈现提示的设置扩展
Graphics
的方式。在默认属性设置下该定义的执行方式完全相同。例如,默认
Stroke
是一个宽度为 1 且没有虚线的
BasicStroke
,屏幕绘制的默认 Transform 是 Identity 转换。
下面两个规则提供了可预见的呈现行为(无论是否使用了重叠还是抗锯齿)。
将设备坐标定义为在设备像素之间,这避免了重叠呈现和抗锯齿呈现的结果不一致。如果将坐标定义为在像素的中心,则由矩形等形状覆盖的某些像素仅是半覆盖。通过重叠的呈现,半覆盖的像素可能呈现在形状内部,也可能呈现在形状外部。使用抗锯齿呈现,整个形状边缘上的像素都是半覆盖的。另一方面,由于坐标被定义在像素之间,所以无论是否使用抗锯齿进行呈现,像矩形这样的形状将不会有半覆盖像素。
使用
BasicStroke
对象勾画的线和路径可以“标准化”,从而在不同的可绘制点上定位时,无论使用重叠还是抗锯齿呈现进行的绘制都能提供一致的轮廓呈现。此标准化过程通过
KEY_STROKE_CONTROL
提示控制。虽然未指定准确的标准化算法,但此标准化的目标是为了确保可以使用一致的可视外观呈现线条,而不考虑它们在像素网格上的位置;另一个目的是促进以抗锯齿模式呈现更连续的水平和垂直线,从而与没有抗锯齿的线更为相似。典型的标准化步骤可以将抗锯齿线端点提升到像素中心,以减少混合量;也可以调整无抗锯齿线的子像素位置,以便浮点线宽度舍入为近似相等的偶数或奇数像素计数。此过程可以将端点向上移动半个像素(通常沿两个坐标轴的正无穷大方向移动),以得到一致的结果。
在默认属性设置下,以下定义的常规遗留方法与以前指定行为的执行方式完全相同:
对于
fill
操作,包括
fillRect
、
fillRoundRect
、
fillOval
、
fillArc
、
fillPolygon
和
clearRect
,现在可以使用所需的
Shape
调用
fill
。例如,在填充矩形时可调用:
fill(new Rectangle(x, y, w, h));
类似地,对于绘制操作,包括
drawLine
、
drawRect
、
drawRoundRect
、
drawOval
、
drawArc
、
drawPolyline
和
drawPolygon
,现在可以使用所需的
Shape
调用
draw
。例如,在绘制矩形时可调用:
draw(new Rectangle(x, y, w, h));
draw3DRect
和
fill3DRect
方法是根据
Graphics
类中的
drawLine
和
fillRect
方法实现的,根据
Graphics2D
上下文中的当前
Stroke
和
Paint
对象可以预知其行为。此类重写了那些独占地使用当前
Color
的实现,重写当前
Paint
以及使用
fillRect
的
Paint
,以描述与以前存在的方法完全相同的行为,而不考虑当前
Stroke
的设置。
Graphics
类仅定义了
setColor
方法来控制要绘制的颜色。由于 Java 2D API 扩展了
Color
对象来实现新的
Paint
接口,因此现有的
setColor
方法现在是将当前
Paint
属性设置为
Color
对象的便捷方法。
setColor(c)
等同于
setPaint(c)
。
Graphics
类定义了两种方法来控制如何将颜色应用到目标。
setPaintMode
方法实现为设置默认
Composite
的便捷方法,它等同于
setComposite(new AlphaComposite.SrcOver)
。
setXORMode(Color xorcolor)
方法实现为设置特殊
Composite
对象的便捷方法,它忽略源颜色的
Alpha
分量,并将目标颜色设置为以下值:
dstpixel = (PixelOf(srccolor) ^ PixelOf(xorcolor) ^ dstpixel);
clearRect
,
clipRect
,
copyArea
,
create
,
create
,
dispose
,
drawArc
,
drawBytes
,
drawChars
,
drawImage
,
drawImage
,
drawImage
,
drawImage
,
drawImage
,
drawImage
,
drawLine
,
drawOval
,
drawPolygon
,
drawPolygon
,
drawPolyline
,
drawRect
,
drawRoundRect
,
fillArc
,
fillOval
,
fillPolygon
,
fillPolygon
,
fillRect
,
fillRoundRect
,
finalize
,
getClip
,
getClipBounds
,
getClipBounds
,
getClipRect
,
getColor
,
getFont
,
getFontMetrics
,
getFontMetrics
,
hitClip
,
setClip
,
setClip
,
setColor
,
setFont
,
setPaintMode
,
setXORMode
,
toString
protected
Graphics2D
()
构建一个新的
Graphics2D
对象。由于
Graphics2D
是一个抽象类,而且它必须由不同输出设备的子类定制,所以无法直接创建
Graphics2D
对象。相反,
Graphics2D
对象必须从另一个
Graphics2D
对象获得、由某个
Component
创建,或者从
BufferedImage
之类的图像对象获得。
另请参见:
Component.getGraphics()
,
Graphics.create()
绘制指定矩形的 3-D 高亮显示边框。矩形的边是高亮显示的,以至于从左上角看呈斜面并加亮。
高亮显示效果所用的颜色根据当前颜色确定。得到的矩形覆盖的区域为
width + 1
像素宽乘以
height + 1
像素高。此方法独占使用当前
Color
,并忽略当前
Paint
覆盖:
类
Graphics
中的
draw3DRect
参数:
x
- 要绘制矩形的 x 坐标。
y
- 要绘制矩形的 y 坐标。
width
- 要绘制矩形的宽度。
height
- 要绘制矩形的高度。
raised
- 一个用于确定矩形是凸出平面显示还是凹入平面显示的 boolean 值。
另请参见:
Graphics.fill3DRect(int, int, int, int, boolean)
boolean raised)
绘制一个用当前颜色填充的 3-D 高亮显示矩形。矩形的边是高亮显示的,以至于从左上角看呈斜面并加亮。高亮显示效果和填充所用的颜色根据当前
Color
确定。此方法独占使用当前
Color
,并忽略当前
Paint
覆盖:
类
Graphics
中的
fill3DRect
参数:
x
- 要填充矩形的 x 坐标。
y
- 要填充矩形的 y 坐标。
width
- 要填充矩形的宽度。
height
- 要填充矩形的高度。
raised
- 一个用于确定矩形是凸出平面显示还是凹入平面显示的 boolean 值。
另请参见:
Graphics.draw3DRect(int, int, int, int, boolean)
public abstract void
draw
(
Shape
s)
使用当前
Graphics2D
上下文的设置勾画
Shape
的轮廓。应用的呈现属性包括
Clip
、
Transform
、
Paint
、
Composite
和
Stroke
属性。
参数:
s
- 要呈现的
Shape
另请参见:
setStroke(java.awt.Stroke)
,
setPaint(java.awt.Paint)
,
Graphics.setColor(java.awt.Color)
,
transform(java.awt.geom.AffineTransform)
,
setTransform(java.awt.geom.AffineTransform)
,
clip(java.awt.Shape)
,
Graphics.setClip(int, int, int, int)
,
setComposite(java.awt.Composite)
public abstract boolean
drawImage
(
Image
img,
AffineTransform
xform,
ImageObserver
obs)
呈现一个图像,在绘制前进行从图像空间到用户空间的转换。从用户空间到设备空间的转换使用
Graphics2D
中的当前
Transform
完成。在应用
Graphics2D
上下文中的 transform 属性之前,指定的转换被应用到图像。应用的呈现属性包括
Clip
、
Transform
和
Composite
属性。注意,如果指定的转换不可逆,则不会完成呈现。
参数:
img
- 要呈现的指定图像。如果
img
为 null,则此方法不执行任何动作。
xform
- 从图像空间到用户空间的转换
obs
- 转换了多个
Image
时要通知的
ImageObserver
返回:
如果
Image
被完全加载并完全呈现,则为
true
,否则为 null;如果仍在加载
Image
,则为
false
另请参见:
transform(java.awt.geom.AffineTransform)
,
setTransform(java.awt.geom.AffineTransform)
,
setComposite(java.awt.Composite)
,
clip(java.awt.Shape)
,
Graphics.setClip(int, int, int, int)
参数:
op
- 在呈现之前要应用到图像的过滤器
img
- 要呈现的指定
BufferedImage
。
如果
img
为 null,则此方法不执行任何动作。
x
- 用户空间中呈现该图像左上角位置的 x 坐标
y
- 用户空间中呈现该图像左上角位置的 y 坐标
另请参见:
transform(java.awt.geom.AffineTransform)
,
setTransform(java.awt.geom.AffineTransform)
,
setComposite(java.awt.Composite)
,
clip(java.awt.Shape)
,
Graphics.setClip(int, int, int, int)
AffineTransform
xform)
呈现
RenderedImage
,在绘制前进行从图像空间到用户空间的转换。从用户空间到设备空间的转换使用
Graphics2D
中的当前
Transform
完成。在应用
Graphics2D
上下文中的 transform 属性之前,指定的转换被应用到图像。应用的呈现属性包括
Clip
、
Transform
和
Composite
属性。注意,如果指定的转换不可逆,则不会完成呈现。
参数:
img
- 要呈现的图像。如果
img
为 null,则此方法不执行任何操作。
xform
- 从图像空间到用户空间的转换
另请参见:
transform(java.awt.geom.AffineTransform)
,
setTransform(java.awt.geom.AffineTransform)
,
setComposite(java.awt.Composite)
,
clip(java.awt.Shape)
,
Graphics.setClip(int, int, int, int)
AffineTransform
xform)
呈现
RenderableImage
,在绘制前进行从图像空间到用户空间的转换。从用户空间到设备空间的转换使用
Graphics2D
中当前的
Transform
完成。在应用
Graphics2D
上下文中的 transform 属性之前,指定的转换被应用到图像。应用的呈现属性包括
Clip
、
Transform
和
Composite
属性。注意,如果指定的转换不可逆,则不会完成呈现。
呈现
RenderableImage
时,可以使用在
Graphics2D
对象上设置的呈现提示。如果由特定
RenderableImage
识别的特定提示需要显式控制,或者需要知道使用哪一个提示,则应直接从
RenderableImage
获取
RenderedImage
,并使用
drawRenderedImage
呈现它。
参数:
img
- 要呈现的图像。如果
img
为 null,则此方法不执行任何操作。
xform
- 从图像空间到用户空间的转换
另请参见:
transform(java.awt.geom.AffineTransform)
,
setTransform(java.awt.geom.AffineTransform)
,
setComposite(java.awt.Composite)
,
clip(java.awt.Shape)
,
Graphics.setClip(int, int, int, int)
,
drawRenderedImage(java.awt.image.RenderedImage, java.awt.geom.AffineTransform)
int y)
使用
Graphics2D
上下文中的当前文本属性状态呈现指定的
String
的文本。首字符的基线位于用户空间的 (
x
,
y
) 位置处。应用的呈现属性包括
Clip
、
Transform
、
Paint
、
Font
和
Composite
属性。对于脚本系统(如 Hebrew 和 Arabic)中的字符,在提供的坐标位于基线上最左边字符的情况下,可以从右到左呈现字形。
指定者:
类
Graphics
中的
drawString
参数:
str
- 要呈现的字符串
x
- 呈现
String
位置的 x 坐标
y
- 呈现
String
位置的 y 坐标
NullPointerException
- 如果
str
为
null
从以下版本开始:
JDK1.0
另请参见:
Graphics.drawBytes(byte[], int, int, int, int)
,
Graphics.drawChars(char[], int, int, int, int)
float y)
使用
Graphics2D
上下文中当前文本属性状态呈现由指定
String
指定的文本。首字符的基线位于用户空间中的 (
x
,
y
) 位置处。应用的呈现属性包括
Clip
、
Transform
、
Paint
、
Font
和
Composite
属性。对于脚本系统(如 Hebrew 和 Arabic)中的字符,在提供的坐标位于基线上最左边字符的情况下,可以从右到左呈现字形。
参数:
str
- 要呈现的
String
x
- 呈现
String
位置的 x 坐标
y
- 呈现
String
位置的 y 坐标
NullPointerException
- 如果
str
为
null
另请参见:
setPaint(java.awt.Paint)
,
Graphics.setColor(java.awt.Color)
,
Graphics.setFont(java.awt.Font)
,
setTransform(java.awt.geom.AffineTransform)
,
setComposite(java.awt.Composite)
,
Graphics.setClip(int, int, int, int)
依照
TextAttribute
类的规范应用指定迭代器的属性,呈现指定迭代器的文本。
首字符的基线位于用户空间中的 (
x
,
y
) 位置处。对于脚本系统(如 Hebrew 和 Arabic)中的字符,在提供的坐标位于基线上最左边字符的情况下,可以从右到左呈现字形。
指定者:
类
Graphics
中的
drawString
参数:
iterator
- 要呈现其文本的迭代器
x
- 要呈现迭代器文本处的 x 坐标
y
- 要呈现迭代器文本处的 y 坐标
NullPointerException
- 如果
iterator
为
null
另请参见:
setPaint(java.awt.Paint)
,
Graphics.setColor(java.awt.Color)
,
setTransform(java.awt.geom.AffineTransform)
,
setComposite(java.awt.Composite)
,
Graphics.setClip(int, int, int, int)
依照
TextAttribute
类的规范应用指定迭代器的属性,呈现指定迭代器的文本。
首字符的基线位于用户空间中的 (
x
,
y
) 位置处。对于脚本系统(如 Hebrew 和 Arabic)中的字符,在提供的坐标位于基线上最左边字符的情况下,可以从右到左呈现字形。
参数:
iterator
- 要呈现其文本的迭代器
x
- 要呈现迭代器文本处的 x 坐标
y
- 要呈现迭代器文本处的 y 坐标
NullPointerException
- 如果
iterator
为
null
另请参见:
setPaint(java.awt.Paint)
,
Graphics.setColor(java.awt.Color)
,
setTransform(java.awt.geom.AffineTransform)
,
setComposite(java.awt.Composite)
,
Graphics.setClip(int, int, int, int)
float y)
使用
Graphics2D
上下文的呈现属性,呈现指定
GlyphVector
的文本。应用的呈现属性包括
Clip
、
Transform
、
Paint
和
Composite
属性。
GlyphVector
指定来自一个
Font
的各个字形。
GlyphVector
还可以包含字形位置。这是将一组字符呈现到屏幕的最快方式。
参数:
g
- 要呈现的
GlyphVector
x
- 字形呈现用户空间中的 x 位置
y
- 字形呈现用户空间中的 y 位置
NullPointerException
- 如果
g
为
null
。
另请参见:
Font.createGlyphVector(java.awt.font.FontRenderContext, java.lang.String)
,
GlyphVector
,
setPaint(java.awt.Paint)
,
Graphics.setColor(java.awt.Color)
,
setTransform(java.awt.geom.AffineTransform)
,
setComposite(java.awt.Composite)
,
Graphics.setClip(int, int, int, int)
public abstract void
fill
(
Shape
s)
使用
Graphics2D
上下文的设置,填充
Shape
的内部区域。应用的呈现属性包括
Clip
、
Transform
、
Paint
和
Composite
属性。
参数:
s
- 要填充的
Shape
另请参见:
setPaint(java.awt.Paint)
,
Graphics.setColor(java.awt.Color)
,
transform(java.awt.geom.AffineTransform)
,
setTransform(java.awt.geom.AffineTransform)
,
setComposite(java.awt.Composite)
,
clip(java.awt.Shape)
,
Graphics.setClip(int, int, int, int)
boolean onStroke)
检查指定的
Shape
是否与设备空间中的指定
Rectangle
相交。如果
onStroke
为 false,则此方法会检查指定
Shape
的内部区域是否与指定的
Rectangle
相交。如果
onStroke
为
true
,则此方法会检查指定
Shape
轮廓的
Stroke
是否与指定的
Rectangle
相交。可应用的呈现属性包括
Clip
、
Transform
和
Stroke
属性。
参数:
rect
- 检查设备空间中是否相交的区域
s
- 检查是否相交的
Shape
onStroke
- 用于在测试中选择笔划或填充图形的标志。如果该标志为
true
,则测试
Stroke
轮廓。如果该标志为
false
,则测试填充的
Shape
。
返回:
如果存在相交,则返回
true
;否则返回
false
另请参见:
setStroke(java.awt.Stroke)
,
fill(java.awt.Shape)
,
draw(java.awt.Shape)
,
transform(java.awt.geom.AffineTransform)
,
setTransform(java.awt.geom.AffineTransform)
,
clip(java.awt.Shape)
,
Graphics.setClip(int, int, int, int)
为
Graphics2D
上下文设置
Composite
。
Composite
用于所有绘制方法中,如
drawImage
、
drawString
、
draw
和
fill
。
它指定新的像素如何在呈现过程中与图形设备上的现有像素组合。
如果此
Graphics2D
上下文正在向显示屏幕绘制
Component
,并且
Composite
是自定义对象,而不是
AlphaComposite
类的实例,那么如果有安全管理器,就可以使用
AWTPermission("readDisplayPixels")
权限调用其
checkPermission
方法。
参数:
comp
- 用于呈现的
Composite
对象
SecurityException
- 如果自定义的
Composite
对象被用于呈现到屏幕,并设置了安全管理器,且其
checkPermission
方法不允许该操作。
另请参见:
Graphics.setXORMode(java.awt.Color)
,
Graphics.setPaintMode()
,
getComposite()
,
AlphaComposite
,
SecurityManager.checkPermission(java.security.Permission)
,
AWTPermission
public abstract void
setPaint
(
Paint
paint)
为
Graphics2D
上下文设置
Paint
属性。使用为
null
的
Paint
对象调用此方法对此
Graphics2D
的当前
Paint
属性没有任何影响。
参数:
paint
- 呈现过程中用于生成颜色的
Paint
对象;或者为
null
另请参见:
Graphics.setColor(java.awt.Color)
,
getPaint()
,
GradientPaint
,
TexturePaint
Object
hintValue)
为呈现算法设置单个首选项的值。提示类别包括对呈现过程中的呈现质量和总时间/质量折衷的控制。有关常用键和值的定义,请参考
RenderingHints
类。
参数:
hintKey
- 要设置提示的键。
hintValue
- 指示指定提示类别首选项的值。
另请参见:
getRenderingHint(RenderingHints.Key)
,
RenderingHints
public abstract
Object
getRenderingHint
(
RenderingHints.Key
hintKey)
返回呈现算法的单个首选项的值。提示类别包括对呈现过程中的呈现质量和总时间/质量折衷的控制。有关常用键和值的定义,请参考
RenderingHints
类。
参数:
hintKey
- 与要获得的提示对应的键。
返回:
表示指定提示键的值的对象。一些键及其关联值在
RenderingHints
类中定义。
另请参见:
RenderingHints
,
setRenderingHint(RenderingHints.Key, Object)
public abstract void
setRenderingHints
(
Map
<?,?> hints)
使用指定的
hints
替换用于所有呈现算法首选项的值。丢弃所有呈现提示的现有值,并从指定的
Map
对象初始化一组新的已知提示和值。提示类别包括对呈现过程中的呈现质量和总时间/质量折衷的控制。有关常用键和值的定义,请参考
RenderingHints
类。
参数:
hints
- 要设置的呈现提示
另请参见:
getRenderingHints()
,
RenderingHints
public abstract void
addRenderingHints
(
Map
<?,?> hints)
为呈现算法设置任意数量的首选项值。仅修改在指定
Map
对象中存在的呈现提示值。所有指定对象中不存在的其它首选项不做修改。提示类别包括对呈现过程中的呈现质量和总时间/质量折衷的控制。有关常用键和值的定义,请参考
RenderingHints
类。
参数:
hints
- 要设置的呈现提示
另请参见:
RenderingHints
int y)
将
Graphics2D
上下文的原点平移到当前坐标系中的点 (
x
,
y
)。修改
Graphics2D
上下文,使其新的原点对应于此
Graphics2D
上下文原坐标系中的点 (
x
,
y
)。在此图形上下文上执行的后续呈现操作使用的所有坐标均相对于这个新原点。
指定者:
类
Graphics
中的
translate
参数:
x
- 指定的 x 坐标
y
- 指定的 y 坐标
从以下版本开始:
JDK1.0
double ty)
将当前
Graphics2D
Transform
与平移转换连接。后续呈现相对于前一位置平移指定的距离。这等同于调用 transform(T),其中 T 为以下矩阵表示的
AffineTransform
:
[ 1 0 tx ]
[ 0 1 ty ]
[ 0 0 1 ]
参数:
tx
- 沿 x 轴平移的距离
ty
- 沿 y 轴平移的距离
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
- 旋转的角度,以弧度为单位
double y)
将当前的
Graphics2D
Transform
与平移后的旋转转换连接。后续呈现的变换如下:平移到指定位置,旋转指定弧度,然后向回平移相同的距离。这等同于以下调用序列:
translate(x, y);
rotate(theta);
translate(-x, -y);
使用正角度 theta 进行旋转,可将正 x 轴上的点转向正 y 轴。
参数:
theta
- 旋转的角度,以弧度为单位
x
- 旋转原点的 x 坐标
y
- 旋转原点的 y 坐标
double sy)
将当前
Graphics2D
Transform
与缩放转换连接。后续呈现相对于以前的缩放比例根据指定的缩放系数来重新调整大小。这等同于调用
transform(S)
,其中 S 为以下矩阵表示的
AffineTransform
:
[ sx 0 0 ]
[ 0 sy 0 ]
[ 0 0 1 ]
参数:
sx
- 相对于以前的呈现操作,后续呈现操作中的与 X 坐标相乘的量。
sy
- 相对于以前的呈现操作,后续呈现操作中的与 Y 坐标相乘的量。
double shy)
将当前
Graphics2D
Transform
与剪裁转换连接。后续呈现相对于以前的位置由指定的乘式剪裁。这等同于调用
transform(SH)
,其中 SH 为以下矩阵表示的
AffineTransform
:
[ 1 shx 0 ]
[ shy 1 0 ]
[ 0 0 1 ]
参数:
shx
- 在正 X 轴方向移动坐标的乘数,它可以作为其 Y 坐标的函数
shy
- 在正 Y 轴方向移动坐标的乘数,它可以作为其 X 坐标的函数
public abstract void
transform
(
AffineTransform
Tx)
根据“最后指定首先应用”规则,使用此
Graphics2D
中的
Transform
组合
AffineTransform
对象。如果当前
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(java.awt.geom.AffineTransform)
,
AffineTransform
public abstract void
setTransform
(
AffineTransform
Tx)
重写
Graphics2D
上下文中的 Transform。警告:
切勿
使用此方法在现有转换之上应用新的坐标转换,因为
Graphics2D
可能已经有用于其它用途(例如,呈现 Swing 组件或应用缩放转换以调整打印机的分辨率)的转换。
要添加坐标转换,请使用
transform
、
rotate
、
scale
或
shear
方法。
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
另请参见:
transform(java.awt.geom.AffineTransform)
,
getTransform()
,
AffineTransform
public abstract void
setBackground
(
Color
color)
设置
Graphics2D
上下文的背景色。背景色用于清除区域。当为
Component
构建
Graphics2D
时,可以从
Component
继承背景色。设置
Graphics2D
上下文中的背景色仅影响后续
clearRect
调用,不影响该
Component
的背景色。要更改
Component
的背景,请使用该
Component
的相应方法。
参数:
color
- 在对
clearRect
的后续调用中所用的背景色
另请参见:
getBackground()
,
Graphics.clearRect(int, int, int, int)
public abstract void
clip
(
Shape
s)
将当前
Clip
与指定
Shape
的内部区域相交,并将
Clip
设置为所得的交集。与当前
Clip
相交之前,使用当前
Graphics2D
Transform
转换指定的
Shape
。
此方法用于使当前
Clip
变小。要使
Clip
变大,请使用
setClip
。
此方法修改的
用户剪贴区
独立于与设备边界和可视性关联的剪切。如果以前没有设置任何剪贴区,或者已经使用带有
null
参数的
setClip
将剪贴区清除,那么指定的
Shape
将成为新的用户剪贴区。
参数:
s
- 要与当前
Clip
相交的
Shape
。如果
s
为
null
,则此方法会清除当前
Clip
。
另请参见:
FontRenderContext
,
Font.createGlyphVector(java.awt.font.FontRenderContext, java.lang.String)
,
TextLayout