JavaFX 線

2022-06-09 17:18 更新

JavaFX教程 - JavaFX線


為了在JavaFX場景上渲染圖形,我們需要基本的形狀和顏色。

Node 類是所有JavaFX場景圖形節(jié)點(diǎn)的基本基類。它提供了轉(zhuǎn)換,翻譯和應(yīng)用效果到任何節(jié)點(diǎn)的能力。

javafx.scene.shape.Shape 類是 Node 類的后代。

所有較舊的JavaFX 2.x Builder類在JavaFX 8中已棄用。

JavaFX線

當(dāng)在JavaFX場景圖形上繪制時,使用屏幕坐標(biāo)空間(系統(tǒng))渲染線。

屏幕坐標(biāo)系將(0,0)放在左上角。

x坐標(biāo)沿x軸移動點(diǎn)。從上到下移動點(diǎn)時,y坐標(biāo)值增加。

下圖顯示了右側(cè)的屏幕坐標(biāo)系。

null

在JavaFX中,場景圖形對象(如線,圓和矩形)是Shape類的派生類。

所有形狀對象可以在兩個成形區(qū)域之間執(zhí)行幾何操作,例如減法,相交和并集。

要在JavaFX中繪制線條,我們將使用 javafx.scene.shape.Line 類。

要創(chuàng)建一個 Line 對象,我們需要指定一個開始(x,y)坐標(biāo)和結(jié)束坐標(biāo)。

創(chuàng)建線節(jié)點(diǎn)時,有兩種方法來設(shè)置起點(diǎn)和終點(diǎn)。

第一種方法使用具有參數(shù)startX,startY,endX和endY的構(gòu)造函數(shù)所有參數(shù)的數(shù)據(jù)類型為 double 。

以下代碼使用構(gòu)造函數(shù)創(chuàng)建具有起點(diǎn)(100,10)和終點(diǎn)(10,110)的線。

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

創(chuàng)建行節(jié)點(diǎn)的第二種方法是使用空構(gòu)造函數(shù)來實(shí)例化 Line 類,然后使用setter方法設(shè)置每個屬性。

以下代碼顯示如何創(chuàng)建線對象和使用setter方法設(shè)置行的起點(diǎn)和終點(diǎn)。

Line line = new Line(); 
line.setStartX(100); 
line.setStartY(10); 
line.setEndX(10); 
line.setEndY(110);

在場景圖上繪制的線節(jié)點(diǎn)默認(rèn)為1.0的筆觸寬度和黑色的筆觸顏色。

所有形狀的筆觸顏色都為null,這意味著除了Line,Polyline和Path節(jié)點(diǎn)之外沒有顏色。

要創(chuàng)建不同種類的線,我們可以設(shè)置屬性繼承自父類 javafx.scene.shape.Shape 的屬性。

下表顯示了我們可以在一行上設(shè)置的屬性。

要檢索或修改每個屬性,您將使用其適當(dāng)?shù)膅etter和setter方法。

屬性數(shù)據(jù)類型 / 說明
filljavafx.scene.paint.Paint
用于填充形狀內(nèi)的顏色。
smoothBoolean
True表示打開反鋸齒,false表示關(guān)閉反鋸齒。
strokeDashOffsetDouble
將距離設(shè)置為虛線圖案。
strokeLineCapjavafx.scene.shape.StrokeLineCap
在線或路徑的末尾設(shè)置帽樣式。有三種樣式:
  • StrokeLineCap.BUTT
  • StrokeLineCap.ROUND
  • StrokeLineCap.SQUARE
strokeLineJoinjavafx.scene.shape.StrokeLineJoin
當(dāng)線相遇時設(shè)置裝飾。有三種類型:
  • StrokeLineJoin.MITER
  • StrokeLineJoin.BEVEL
  • StrokeLineJoin.ROUND
strokeMiterLimitDouble
設(shè)置斜角接縫的限制以及斜角接縫裝飾StrokeLineJoin.MITER。
strokejavafx.scene.paint.Paint
設(shè)置形狀的筆劃線的顏色。
strokeTypejavafx.scene.shape.StrokeType
設(shè)置在Shape節(jié)點(diǎn)的邊界周圍繪制描邊的位置。有三種類型:
  • StrokeType.CENTERED
  • StrokeType.INSIDE
  • StrokeType.OUTSIDE
strokeWidthDouble
設(shè)置線的寬度。

例子

以下代碼創(chuàng)建一個Line對象,并使用setter方法設(shè)置開始和結(jié)束坐標(biāo)。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.VBox;
import javafx.scene.shape.Line;
import javafx.stage.Stage;

public class Main extends Application {

    @Override
    public void start(Stage stage) {
        VBox box = new VBox();
        final Scene scene = new Scene(box,300, 250);
        scene.setFill(null);
        
        Line line = new Line();
        line.setStartX(0.0f);
        line.setStartY(0.0f);
        line.setEndX(100.0f);
        line.setEndY(100.0f);
        
        box.getChildren().add(line);
        
        stage.setScene(scene);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}

上面的代碼生成以下結(jié)果。

null

例2

以下代碼設(shè)置更多的線屬性,包括筆觸顏色,筆觸寬度和線帽。

之后,它還設(shè)置了線的破折號樣式。

import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Line;
import javafx.scene.shape.StrokeLineCap;
import javafx.stage.Stage;

public class Main extends Application {
  @Override
  public void start(Stage primaryStage) {
    primaryStage.setTitle("Drawing Lines");

    Group root = new Group();
    Scene scene = new Scene(root, 300, 150, Color.GRAY);

    Line redLine = new Line(10, 10, 200, 10);

    redLine.setStroke(Color.RED);
    redLine.setStrokeWidth(10);
    redLine.setStrokeLineCap(StrokeLineCap.BUTT);

    redLine.getStrokeDashArray().addAll(15d, 5d, 15d, 15d, 20d);
    redLine.setStrokeDashOffset(10);

    root.getChildren().add(redLine);

    primaryStage.setScene(scene);
    primaryStage.show();
  }
  public static void main(String[] args) {
    launch(args);
  }
}

上面的代碼生成以下結(jié)果。

null
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號