JavaFX - 二维图形



在上一章中,我们学习了 JavaFX 的基本应用,了解了如何创建一个空窗口以及如何在 JavaFX 的 XY 平面上绘制一条直线。除了直线,我们还可以绘制其他几种二维图形。

二维图形

一般来说,二维图形是在 XY 平面上绘制的几何图形,包括直线、矩形、圆形等。

使用 JavaFX 库,您可以绘制:

  • 预定义图形,例如直线、矩形、圆形、椭圆、多边形、折线、三次贝塞尔曲线、二次贝塞尔曲线、弧形。

  • 路径元素,例如 MoveTO 路径元素、直线、水平线、垂直线、三次贝塞尔曲线、二次贝塞尔曲线、弧形。

  • 除此之外,您还可以通过解析 SVG 路径来绘制二维图形。

上述每个二维图形都由一个类表示,所有这些类都属于包 **javafx.scene.shape**。名为 **Shape** 的类是 JavaFX 中所有二维图形的基类。

在 JavaFX 中创建二维图形

要创建图表,您需要:

  • 实例化所需图形的相应类。
  • 设置图形的属性。
  • 将图形对象添加到组中。

实例化相应类

要创建二维图形,首先需要实例化其相应的类。例如,如果要创建一个圆形,需要如下实例化名为 Circle 的类:

Circle circle = new Circle();

设置图形的属性

实例化类之后,需要使用 setter 方法为图形设置属性。例如,可以使用以下 setter 方法设置 Circle 类中心的 X、Y 坐标及其半径:

// Setting the Properties of a circle
circle.setCenterX(300.0f); 
circle.setCenterY(135.0f); 
circle.setRadius(100.0f);        

将图形对象添加到组中

最后,需要将圆形对象作为构造函数的参数传递给组,如下所示。

//Creating a Group object  
Group root = new Group(circle);

JavaFX 中提供的各种二维图形

下表列出了 JavaFX 提供的各种图形(类)。

序号 图形和描述
1 直线

直线是连接两点的几何结构。包 **javafx.scene.shape** 的 **Line** 类表示 XY 平面上的直线。

2 矩形

一般来说,矩形是一个四边形,它有两对平行且相交的边,所有内角都是直角。在 JavaFX 中,矩形由名为 **Rectangle** 的类表示。此类属于包 **javafx.scene.shape**。

3 圆角矩形

在 JavaFX 中,您可以绘制具有尖锐边缘或圆弧边缘的矩形,具有圆弧边缘的矩形称为圆角矩形。

4 圆形

圆形是由一条形成闭合环路的线构成的,环路上的每个点与中心点的距离都相同。在 JavaFX 中,圆形由名为 **Circle** 的类表示。此类属于包 **javafx.scene.shape**。

5 椭圆

椭圆由两点定义,每个点称为焦点。如果取椭圆上的任意一点,则到焦点点的距离之和为常数。椭圆的大小由这两个距离之和决定。

在 JavaFX 中,椭圆由名为 **Ellipse** 的类表示。此类属于包 **javafx.scene.shape**。

6 多边形

由多个共面的线段首尾相连形成的闭合图形。在 JavaFX 中,多边形由名为 **Polygon** 的类表示。此类属于包 **javafx.scene.shape**。

7 折线

折线与多边形相同,只是折线末端不闭合。或者,是由一个或多个线段组成的连续线。在 JavaFX 中,折线由名为 **Polyline** 的类表示。此类属于包 **javafx.scene.shape**。

8 三次贝塞尔曲线

三次贝塞尔曲线是 XY 平面上的三次贝塞尔参数曲线。在 JavaFX 中,三次贝塞尔曲线由名为 **CubicCurve** 的类表示。此类属于包 **javafx.scene.shape**。

9 二次贝塞尔曲线

二次贝塞尔曲线是 XY 平面上的二次贝塞尔参数曲线。在 JavaFX 中,二次贝塞尔曲线由名为 **QuadCurve** 的类表示。此类属于包 **javafx.scene.shape**。

10 弧形

弧形是曲线的一部分。在 JavaFX 中,弧形由名为 **Arc** 的类表示。此类属于包 **javafx.scene.shape**。

弧形的类型

除此之外,我们还可以绘制三种类型的弧形:**开放型、弦形、圆形**。

11 SVGPath

在 JavaFX 中,我们可以通过解析 SVG 路径来构建图像。此类图形由名为 **SVGPath** 的类表示。此类属于包 **javafx.scene.shape**。此类具有名为 **content** 的字符串类型属性。它表示应从中绘制图像的 SVG 路径编码字符串。

二维对象的属性

对于所有二维对象,您可以设置各种属性,例如填充、描边、StrokeType 等。以下部分讨论二维对象的各种属性。

我们将在本教程的后续部分详细学习这些属性。

二维对象的运算

如果我们将多个图形添加到一个组中,则第一个图形将被第二个图形重叠,如下所示。

Operations On 2D Objects

除了变换(旋转、缩放、平移等)、转换(动画)之外,您还可以对二维对象执行三种运算,即:**并集、差集**和**交集**。

  • **并集运算:**此运算将两个或多个图形作为输入,并返回它们占据的区域。

  • 交集运算:此运算以两个或多个形状作为输入,并返回它们之间的交集区域。

  • 减法运算:此运算以两个或多个形状作为输入。然后,它返回第一个形状的面积,但不包括与第二个形状重叠的面积。

广告