Java 教程是针对 JDK 8 编写的。本页面中描述的示例和实践不利用后续版本中引入的改进,并且可能使用不再可用的技术。
请参阅 Java 语言更改 了解 Java SE 9 及后续版本中更新的语言特性的概述。
请参阅 JDK 发行说明 了解所有 JDK 发行版本的新功能、增强功能以及已删除或已弃用选项的信息。
你已经知道如何创建不同的几何图形和更复杂的形状。本课程将教你如何给你的图形添加一些颜色和花哨的轮廓,并表示填充和描边:
要将花哨的线条样式和填充模式应用于几何图形,需要在渲染之前在Graphics2D
上下文中更改描边和填充属性。例如,通过创建适当的Stroke
对象来绘制虚线。要将此描边添加到Graphics2D
上下文中,在绘制线条之前调用setStroke
方法。类似地,可以通过创建GradientPaint
对象并将其添加到Graphics2D
上下文中,将渐变填充应用于Shape
对象。
以下代码行为几何图形添加了填充和描边上下文:
// 绘制 RoundRectangle2D.Double final static float dash1[] = {10.0f}; final static BasicStroke dashed = new BasicStroke(1.0f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER, 10.0f, dash1, 0.0f); g2.setStroke(dashed); g2.draw(new RoundRectangle2D.Double(x, y, rectWidth, rectHeight, 10, 10));
// 填充 Ellipse2D.Double redtowhite = new GradientPaint(0,0,color.RED,100, 0,color.WHITE); g2.setPaint(redtowhite); g2.fill (new Ellipse2D.Double(0, 0, 100, 50));
ShapesDemo2D.java
代码示例表示了描边和填充的附加实现。
使用Java 2D的Stroke
和Paint
类,你可以定义花哨的线条样式和填充模式。
线条样式由Graphics2D
渲染上下文中的描边属性定义。要设置描边属性,你需要创建一个BasicStroke
对象,并将其传递给Graphics2D
的setStroke
方法。
BasicStroke
对象保存了关于线条宽度、连接样式、端点样式和虚线样式的信息。当使用draw
方法渲染Shape
时,会使用这些信息。
线条宽度是线条垂直于其轨迹的厚度。线条宽度以用户坐标单位表示,用户坐标单位大致相当于默认变换下的1/72英寸。
连接样式是应用在两个线段相交处的装饰效果。BasicStroke
支持以下三种连接样式:
JOIN_BEVEL
JOIN_MITER
JOIN_ROUND
端点样式是应用在线段结束处的装饰效果。BasicStroke
支持以下三种端点样式:
CAP_BUTT
CAP_ROUND
CAP_SQUARE
虚线样式定义了沿线条长度应用的不透明和透明段的模式。虚线样式由虚线数组和虚线相位定义。虚线数组定义了虚线模式,数组中的交替元素表示用户坐标单位中的虚线长度和虚线之间的空白长度。元素0表示第一个虚线,元素1表示第一个空白,依此类推。虚线相位是虚线模式的偏移量,也以用户坐标单位表示。虚线相位指示了虚线模式应用于线条起始部分的哪个部分。
填充图案由Graphics2D
渲染上下文中的paint属性定义。要设置paint属性,您需要创建一个实现Paint
接口的对象实例,并将其传递给Graphics2D
的setPaint
方法。
以下三个类实现了Paint
接口:Color
、GradientPaint
和TexturePaint
。
要创建一个GradientPaint
,您需要指定起始位置和颜色,以及结束位置和颜色。渐变沿连接两个位置的直线按比例从一种颜色变化到另一种颜色。例如:
TexturePaint
类的图案由BufferedImage
类定义。要创建一个TexturePaint
对象,您需要指定包含图案的图像以及用于复制和锚定图案的矩形。以下图像表示了这个特性: