绘制几何图元
Java 2D API 提供了几个类,这些类定义了常见的几何对象,例如点,线,曲线和矩形。这些几何类是java.awt.geom包的一部分。
PathIteratorinterface定义了用于从路径中检索元素的方法。
Shapeinterface提供了一组用于描述和检查几何路径对象的方法。该interface由GeneralPath类和其他几何类实现。
本节中表示的所有示例都使用java.awt.geom
包创建几何,然后使用Graphics2D类渲染它们。首先,获得一个Graphics2D
对象,例如,通过转换paint()
方法的Graphics
参数。
public void paint (Graphics g) {
Graphics2D g2 = (Graphics2D) g;
...
}
Point
Point类创建一个表示(x,y)coordinate space中位置的点。子类Point2D.Float
和Point2D.Double
提供相应的 float 和 double 精度,用于存储点的坐标。
//Create Point2D.Double
Point2D.Double point = new Point2D.Double(x, y);
要创建坐标为 0,0 的点,请使用默认构造函数Point2D.Double()
。
您可以使用setLocation
方法来设置点的位置,如下所示:
-
setLocation(double x, double y)
–将点定义坐标的位置设置为 Double 精度值。 -
setLocation(Point2D p)
–使用另一个点的坐标设置点的位置。
同样,Point2D
类具有一些方法,可以计算当前点和具有给定坐标的点之间的距离,或两个点之间的距离。
Line
Line2D类表示(x,y)坐标空间中的线段。 Line2D. Float
和Line2D.Double
子类以 float 和 double 精度指定行。例如:
// draw Line2D.Double
g2.draw(new Line2D.Double(x1, y1, x2, y2));
此类包含几种setLine()
方法来定义线的端点。
或者,可以通过使用Line2D.Float
类的构造函数来指定行的端点,如下所示:
-
Line2D.Float(float X1, float Y1, float X2, float Y2)
-
Line2D.Float(Point2D p1, Point2D p2)
使用Graphics2D
类中的Stroke对象定义直线路径的笔触。
Curves
java.awt.geom
包使您可以创建二次曲线或三次曲线段。
二次曲线段
QuadCurve2D类实现Shape
interface。此类表示(x,y)坐标空间中的二次参数曲线段。 QuadCurve2D.Float
和QuadCurve2D.Double
子类指定浮点和 Double 精度的二次曲线。
几种setCurve
方法用于指定曲线的两个端点和一个控制点,可以通过其他点的坐标以及使用给定数组直接定义其坐标。
一种非常有用的方法setCurve(QuadCurve2D)
将二次曲线的端点和控制点设置为与提供的曲线相同的端点。例如:
// create new QuadCurve2D.Float
QuadCurve2D q = new QuadCurve2D.Float();
// draw QuadCurve2D.Float with set coordinates
q.setCurve(x1, y1, ctrlx, ctrly, x2, y2);
g2.draw(q);
三次曲线段
CubicCurve2D类还实现Shapeinterface。此类表示(x,y)坐标空间中的三次参数曲线段。 CubicCurve2D.Float
和CubicCurve2D.Double
子类指定浮点和 Double 精度的三次曲线。
CubicCurve2D
类具有类似的方法将曲线设置为QuadraticCurve2D
类,除了第二个控制点。例如:
// create new CubicCurve2D.Double
CubicCurve2D c = new CubicCurve2D.Double();
// draw CubicCurve2D.Double with set coordinates
c.setCurve(x1, y1, ctrlx1,
ctrly1, ctrlx2, ctrly2, x2, y2);
g2.draw(c);
Rectangle
下例中表示的指定原始类型的类扩展了RectangularShape
类,该类实现了Shape
interface并添加了一些自己的方法。
这些方法使您可以获取有关形状的位置和大小的信息,可以检查矩形的中心点并设置形状的边界。
Rectangle2D类代表由位置(x,y)和尺寸(w x h)定义的矩形。 Rectangle2D.Float
和Rectangle2D.Double
子类以 float 和 double 精度指定一个矩形。例如:
// draw Rectangle2D.Double
g2.draw(new Rectangle2D.Double(x, y,
rectwidth,
rectheight));
RoundRectangle2D类表示具有圆角的矩形,该矩形由位置(x,y),尺寸(w x h)以及拐角弧的宽度和高度定义。 RoundRectangle2D.Float
和RoundRectangle2D.Double
子类以 float 和 double 精度指定一个圆形矩形。
圆角矩形使用以下参数指定:
-
Location
-
Width
-
Height
-
角弧宽度
-
角弧高度
要设置RoundRectangle2D
对象的位置,大小和弧线,请使用setRoundRect(double a, double y, double w, double h, double arcWidth, double arcHeight)
方法。例如:
// draw RoundRectangle2D.Double
g2.draw(new RoundRectangle2D.Double(x, y,
rectwidth,
rectheight,
10, 10));
Ellipse
Ellipse2D类表示由边界矩形定义的椭圆。 Ellipse2D.Float
和Ellipse2D.Double
子类以 float 和 double 精度指定椭圆。
椭圆完全由位置,宽度和高度定义。例如:
// draw Ellipse2D.Double
g2.draw(new Ellipse2D.Double(x, y,
rectwidth,
rectheight));
Arc
要绘制椭圆,请使用Arc2D类。此类表示由边界矩形,起始角度,角度范围和闭合类型定义的弧。 Arc2D.Float
和Arc2D.Double
子类以 float 和 double 精度指定椭圆。
Arc2D
类定义了以下三种类型的弧,由此类中的相应常量表示:OPEN,PIE 和 CHORD。
几种方法可以设置圆弧的大小和参数:
-
直接通过坐标
-
由提供的
Point2D
和Dimension2D
-
通过复制现有的
Arc2D
另外,您可以使用setArcByCenter
方法从中心点指定圆弧,该圆弧由其坐标和半径给出。
// draw Arc2D.Double
g2.draw(new Arc2D.Double(x, y,
rectwidth,
rectheight,
90, 135,
Arc2D.OPEN));
ShapesDemo2D.java代码示例包含所有描述的几何图元的实现。有关本节中表示的类和方法的更多信息,请参见java.awt.geom规范。