為了在JavaFX場(chǎng)景上渲染圖形,我們需要基本的形狀和顏色。
Node
類(lèi)是所有JavaFX場(chǎng)景圖形節(jié)點(diǎn)的基本基類(lèi)。它提供了轉(zhuǎn)換和應(yīng)用效果到任何節(jié)點(diǎn)的能力。
javafx.scene.shape.Shape
類(lèi)是Node
類(lèi)的子類(lèi)。所有較舊的JavaFX 2.x Builder中使用,但在JavaFX 8中這個(gè)類(lèi)已棄用。
當(dāng)在JavaFX場(chǎng)景圖形上繪制時(shí),使用屏幕坐標(biāo)空間(系統(tǒng))渲染線。
屏幕坐標(biāo)系將(0,0
)放在左上角。x
坐標(biāo)沿著x
軸移動(dòng)點(diǎn)。從上到下移動(dòng)點(diǎn)時(shí),y
坐標(biāo)值增加。
下圖顯示了右側(cè)的屏幕坐標(biāo)系。
在JavaFX中,場(chǎng)景圖形對(duì)象(如線,圓和矩形)是Shape
類(lèi)的派生類(lèi)。所有形狀對(duì)象可以在兩個(gè)成形區(qū)域之間執(zhí)行幾何操作,例如減法,相交和并集。要在JavaFX中繪制線條,我們將使用javafx.scene.shape.Line
類(lèi)。
要?jiǎng)?chuàng)建一個(gè)Line
對(duì)象,我們需要指定一個(gè)start(x,y)
坐標(biāo)和一個(gè)結(jié)束坐標(biāo)。
在創(chuàng)建線節(jié)點(diǎn)時(shí),有兩種方法來(lái)設(shè)置起點(diǎn)和終點(diǎn)。
第一種方法使用具有參數(shù):startX
,startY
,endX
和endY
的構(gòu)造函數(shù)。所有參數(shù)的數(shù)據(jù)類(lèi)型為double
。
以下代碼使用構(gòu)造函數(shù)創(chuàng)建一個(gè)起點(diǎn)(100
,10
)和終點(diǎn)(10
,110
)的線條。
Line line = new Line(100, 10, 10, 110);
創(chuàng)建線節(jié)點(diǎn)的第二種方法是使用空構(gòu)造函數(shù)來(lái)實(shí)例化一個(gè)Line
類(lèi),然后使用setter
方法設(shè)置每個(gè)屬性。
以下代碼顯示如何創(chuàng)建一個(gè)線對(duì)象,并使用setter
方法設(shè)置線的起點(diǎn)和終點(diǎn)。
Line line = new Line();
line.setStartX(100);
line.setStartY(10);
line.setEndX(10);
line.setEndY(110);
在場(chǎng)景圖上繪制的線節(jié)點(diǎn)默認(rèn)為1.0
的筆觸寬度和黑色的筆觸顏色。所有形狀的筆觸顏色為null
,這意味著除了Line
,Polyline
和Path
節(jié)點(diǎn)之外沒(méi)有顏色。
要?jiǎng)?chuàng)建不同類(lèi)型的線條,可以設(shè)置繼承自父javafx.scene.shape.Shape
類(lèi)的屬性。下表顯示了可以在一個(gè)線條上設(shè)置的屬性。
屬性 | 數(shù)據(jù)類(lèi)型/說(shuō)明 |
---|---|
fill | javafx.scene.paint.Paint - 用于填充形狀內(nèi)的顏色。 |
smooth | Boolean - true - 表示打開(kāi)反鋸齒,false 表示關(guān)閉反鋸齒。 |
strokeDashOffset | Double - 將距離設(shè)置為虛線模式。 |
strokeLineCap | javafx.scene.shape.StrokeLineCap - 在線或路徑的末尾設(shè)置帽樣式。 有三種風(fēng)格:1.StrokeLineCap.BUTT 2. StrokeLineCap.ROUND 3. StrokeLineCap.SQUARE |
strokeLineJoin | javafx.scene.shape.StrokeLineJoin - 當(dāng)線相遇時(shí)設(shè)置裝飾。 有三種類(lèi)型:1. StrokeLineJoin.MITER 2. StrokeLineJoin.BEVEL 3. StrokeLineJoin.ROUND |
strokeMiterLimit | Double - 設(shè)置斜角連接的限制以及斜角連接裝飾StrokeLineJoin.MITER 。 |
stroke | javafx.scene.paint.Paint - 設(shè)置形狀的筆劃線的顏色。 |
strokeType | javafx.scene.shape.StrokeType - 設(shè)置在Shape 節(jié)點(diǎn)的邊界周?chē)L制描邊的位置。有三種類(lèi)型: 1. StrokeType.CENTERED 2. StrokeType.INSIDE 3. StrokeType.OUTSIDE |
strokeWidth | Double - 設(shè)置線的寬度。 |
以下代碼創(chuàng)建一個(gè)Line
對(duì)象,并使用setter
方法設(shè)置開(kāi)始和結(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;
// at Ww W.y iIB A i .CO M
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é)果。
以下代碼設(shè)置更多的線屬性,包括筆觸顏色,筆觸寬度和線帽。之后,它還設(shè)置了線的破折號(hào)樣式。
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;
// => W w W.y I I b Ai .c O M
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é)果。