JavaFX - 路徑物件



在之前的二維圖形章節中,我們已經學習瞭如何透過例項化類並設定相應的引數來繪製一些簡單的預定義圖形。

但是,僅這些預定義圖形不足以構建比  javafx.shape 包 提供的基本圖形更復雜的圖形。

例如,如果您想繪製如下所示的圖形元素,則不能依賴於這些簡單的圖形。即使您成功地使用直線圖形構建它,程式也會變得過於複雜和低效。

Path Class

為了提高效率,JavaFX 引入了一個名為路徑的概念,其中多條邊將一系列頂點連線在一起。

Path 類

為了繪製這種複雜的結構,JavaFX 提供了一個名為  Path 的類。此類表示圖形的幾何輪廓。

它附加到一個可觀察列表,該列表包含各種  路徑元素 ,例如 moveTo、LineTo、HlineTo、VlineTo、ArcTo、QuadCurveTo、CubicCurveTo。

例項化時,此類將根據給定的路徑元素構造路徑。

您可以在例項化時將路徑元素傳遞給此類,如下所示:

Path myshape = new Path(pathElement1, pathElement2, pathElement3);

或者,您可以獲取可觀察列表並使用  addAll() 方法新增所有路徑元素,如下所示:

Path myshape = new Path(); 
myshape.getElements().addAll(pathElement1, pathElement2, pathElement3); 

您還可以使用 add() 方法單獨新增元素,如下所示:

Path myshape = new Path(); 
myshape.getElements().add(pathElement1);

MoveTo 路徑元素

路徑元素  MoveTo 用於將路徑的當前位置移動到指定的點。它通常用於設定使用路徑元素繪製的圖形的起點。

它由  javafx.scene.shape 包中的  LineTo 類表示。它具有兩個雙精度資料型別屬性:

  • X - 從當前位置繪製直線的點的 x 座標。

  • Y - 從當前位置繪製直線的點的 y 座標。

您可以透過例項化 MoveTo 類並傳遞新點的 x、y 座標來建立一個移動到路徑元素,如下所示:

MoveTo moveTo = new MoveTo(x, y);

如果您沒有向建構函式傳遞任何值,則新點將設定為 (0,0)。

您還可以使用各自的 setter 方法設定 x、y 座標的值,如下所示:

setX(value); 
setY(value); 

示例 - 繪製複雜的路徑

在此示例中,我們將展示如何使用  Path、MoveTo 和  Line 類繪製以下形狀。

Complex Path

將此程式碼儲存在名為  ComplexShape.java 的檔案中。

import javafx.application.Application; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.stage.Stage; 
import javafx.scene.shape.LineTo; 
import javafx.scene.shape.MoveTo; 
import javafx.scene.shape.Path; 
         
public class ComplexShape extends Application { 
   @Override 
   public void start(Stage stage) { 
      //Creating a Path 
      Path path = new Path(); 
       
      //Moving to the starting point 
      MoveTo moveTo = new MoveTo(108, 71); 
        
      //Creating 1st line 
      LineTo line1 = new LineTo(321, 161);  
       
      //Creating 2nd line 
      LineTo line2 = new LineTo(126,232);       
       
      //Creating 3rd line 
      LineTo line3 = new LineTo(232,52);  
       
      //Creating 4th line 
      LineTo line4 = new LineTo(269, 250);   
       
      //Creating 4th line 
      LineTo line5 = new LineTo(108, 71);  
       
      //Adding all the elements to the path 
      path.getElements().add(moveTo); 
      path.getElements().addAll(line1, line2, line3, line4, line5);        
         
      //Creating a Group object  
      Group root = new Group(path); 
         
      //Creating a scene object 
      Scene scene = new Scene(root, 600, 300);  
      
      //Setting title to the Stage 
      stage.setTitle("Drawing an arc through a path");
      
      //Adding scene to the stage 
      stage.setScene(scene);
      
      //Displaying the contents of the stage 
      stage.show();         
   } 
   public static void main(String args[]){ 
      launch(args); 
   } 
}       

使用以下命令從命令提示符編譯並執行儲存的 java 檔案。

javac --module-path %PATH_TO_FX% --add-modules javafx.controls ComplexShape.java 
java --module-path %PATH_TO_FX% --add-modules javafx.controls ComplexShape

輸出

執行後,上述程式將生成一個 JavaFX 視窗,顯示以下輸出:

Drawing Arc through Path

以下是 JavaFX 提供的各種路徑元素(類)。這些類存在於  javafx.shape 包中。所有這些類都繼承  PathElement 類。

序號 形狀和描述
1 LineTo

路徑元素  line 用於從當前位置到指定座標中的點繪製一條直線。它由名為  LineTo 的類表示。此類屬於  javafx.scene.shape 包。

2 HlineTo

路徑元素  HLineTo 用於從當前位置到指定座標中的點繪製一條水平線。它由名為  HLineTo 的類表示。此類屬於  javafx.scene.shape 包。

3 VLineTo

路徑元素  垂直線 用於從當前位置到指定座標中的點繪製一條垂直線。它由名為  VLineTo 的類表示。此類屬於  javafx.scene.shape 包。

4 QuadCurveTo

路徑元素二次曲線用於從當前位置到指定座標中的點繪製一條  二次曲線 。它由名為  QuadraticCurveTo 的類表示。此類屬於  javafx.scene.shape 包。

5 CubicCurveTo

路徑元素  三次曲線 用於從當前位置到指定座標中的點繪製一條三次曲線。它由名為  CubicCurveTo 的類表示。此類屬於  javafx.scene.shape 包。

6 ArcTo

路徑元素  Arc 用於從當前位置到指定座標中的點繪製一條弧線。它由名為  ArcTo 的類表示。此類屬於  javafx.scene.shape 包。

廣告