为了在JavaFX场景上渲染图形,我们需要基本的形状和颜色。
Node类是所有JavaFX场景图形节点的基本基类。它提供了转换和应用效果到任何节点的能力。
javafx.scene.shape.Shape类是Node类的子类。所有较旧的JavaFX 2.x Builder中使用,但在JavaFX 8中这个类已弃用。

JavaFX线条

当在JavaFX场景图形上绘制时,使用屏幕坐标空间(系统)渲染线。
屏幕坐标系将(0,0)放在左上角。x坐标沿着x轴移动点。从上到下移动点时,y坐标值增加。
下图显示了右侧的屏幕坐标系。
JavaFX线条 - 图1
在JavaFX中,场景图形对象(如线,圆和矩形)是Shape类的派生类。所有形状对象可以在两个成形区域之间执行几何操作,例如减法,相交和并集。要在JavaFX中绘制线条,我们将使用javafx.scene.shape.Line类。
要创建一个Line对象,我们需要指定一个start(x,y)坐标和一个结束坐标。
在创建线节点时,有两种方法来设置起点和终点。
第一种方法使用具有参数:startX,startY,endX和endY的构造函数。所有参数的数据类型为double。
以下代码使用构造函数创建一个起点(100,10)和终点(10,110)的线条。

  1. Line line = new Line(100, 10, 10, 110);

创建线节点的第二种方法是使用空构造函数来实例化一个Line类,然后使用setter方法设置每个属性。
以下代码显示如何创建一个线对象,并使用setter方法设置线的起点和终点。

  1. Line line = new Line();
  2. line.setStartX(100);
  3. line.setStartY(10);
  4. line.setEndX(10);
  5. line.setEndY(110);

在场景图上绘制的线节点默认为1.0的笔触宽度和黑色的笔触颜色。所有形状的笔触颜色为null,这意味着除了Line,Polyline和Path节点之外没有颜色。
要创建不同类型的线条,可以设置继承自父javafx.scene.shape.Shape类的属性。下表显示了可以在一个线条上设置的属性。

属性 数据类型/说明
fill javafx.scene.paint.Paint - 用于填充形状内的颜色。
smooth Boolean - true - 表示打开反锯齿,false表示关闭反锯齿。
strokeDashOffset Double - 将距离设置为虚线模式。
strokeLineCap javafx.scene.shape.StrokeLineCap - 在线或路径的末尾设置帽样式。 有三种风格:1.StrokeLineCap.BUTT 2. StrokeLineCap.ROUND 3. StrokeLineCap.SQUARE
strokeLineJoin javafx.scene.shape.StrokeLineJoin - 当线相遇时设置装饰。 有三种类型:1. StrokeLineJoin.MITER 2. StrokeLineJoin.BEVEL 3. StrokeLineJoin.ROUND
strokeMiterLimit Double - 设置斜角连接的限制以及斜角连接装饰StrokeLineJoin.MITER。
stroke javafx.scene.paint.Paint - 设置形状的笔划线的颜色。
strokeType javafx.scene.shape.StrokeType - 设置在Shape节点的边界周围绘制描边的位置。有三种类型: 1. StrokeType.CENTERED 2. StrokeType.INSIDE 3. StrokeType.OUTSIDE
strokeWidth Double - 设置线的宽度。

示例 - 1

以下代码创建一个Line对象,并使用setter方法设置开始和结束坐标。

  1. import javafx.application.Application;
  2. import javafx.scene.Group;
  3. import javafx.scene.Scene;
  4. import javafx.scene.layout.VBox;
  5. import javafx.scene.shape.Line;
  6. import javafx.stage.Stage;
  7. public class Main extends Application {
  8. @Override
  9. public void start(Stage stage) {
  10. Group group = new Group();
  11. final Scene scene = new Scene(group,300, 250);
  12. scene.setFill(null);
  13. Line line = new Line();
  14. //startX/Y 起始位置
  15. line.setStartX(10.0f);
  16. line.setStartY(10.0f);
  17. //endX/Y 结束位置
  18. line.setEndX(150.0f);
  19. line.setEndY(100.0f);
  20. group.getChildren().add(line);
  21. stage.setScene(scene);
  22. stage.show();
  23. }
  24. public static void main(String[] args) {
  25. launch(args);
  26. }
  27. }

上面的代码生成以下结果。
image.png

示例 - 2

以下代码设置更多的线属性,包括笔触颜色,笔触宽度和线帽。之后,它还设置了线的破折号样式。

  1. import javafx.application.Application;
  2. import javafx.scene.Group;
  3. import javafx.scene.Scene;
  4. import javafx.scene.paint.Color;
  5. import javafx.scene.shape.Line;
  6. import javafx.scene.shape.StrokeLineCap;
  7. import javafx.stage.Stage;
  8. public class Main extends Application {
  9. @Override
  10. public void start(Stage primaryStage) {
  11. primaryStage.setTitle("Drawing Lines");
  12. Group root = new Group();
  13. Scene scene = new Scene(root, 300, 150, Color.GRAY);
  14. Line redLine = new Line(10, 10, 200, 10);
  15. redLine.setStroke(Color.RED);
  16. redLine.setStrokeWidth(10);
  17. redLine.setStrokeLineCap(StrokeLineCap.BUTT);
  18. redLine.getStrokeDashArray().addAll(15d, 5d, 15d, 15d, 20d);
  19. redLine.setStrokeDashOffset(10);
  20. root.getChildren().add(redLine);
  21. primaryStage.setScene(scene);
  22. primaryStage.show();
  23. }
  24. public static void main(String[] args) {
  25. launch(args);
  26. }
  27. }

上面的代码生成以下结果。
image.png