另一個基本的JavaFX節點是Text
節點,它允許我們在場景圖上顯示文字。要建立Text
節點,請使用javafx.scene.text.Text
類。
所有JavaFX場景節點都從javafx.scene.Node
中擴充套件,並且它們繼承了許多功能,例如縮放,翻譯或旋轉的功能。
Text
節點的直接父物件是javafx.scene.shape.Shape
類。可以在兩個文字之間執行幾何操作,如減法,相交或聯合。還可以使用文字剪輯視口區域。
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.text.Text;
import javafx.stage.Stage;
// by w Ww .YI iB A I .C o M
public class Main extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Drawing Text");
Group root = new Group();
Scene scene = new Scene(root, 300, 250, Color.WHITE);
int x = 100;
int y = 100;
int red = 30;
int green = 40;
int blue = 50;
Text text = new Text(x, y, "JavaFX 2.0");
text.setFill(Color.rgb(red, green, blue, .99));
text.setRotate(60);
root.getChildren().add(text);
primaryStage.setScene(scene);
primaryStage.show();
}
}
上面的程式碼生成以下結果。
請參考下面旋轉文字的程式碼實現 -
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.text.Text;
import javafx.stage.Stage;
// @ W W w . y IIB A I.C o M
public class Main extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Drawing Text");
Group root = new Group();
Scene scene = new Scene(root, 300, 250, Color.WHITE);
int x = 100;
int y = 100;
int red = 30;
int green = 40;
int blue = 50;
Text text = new Text(x, y, "JavaFX 2.0");
text.setFill(Color.rgb(red, green, blue, .99));
text.setRotate(60);
root.getChildren().add(text);
primaryStage.setScene(scene);
primaryStage.show();
}
}
上面的程式碼生成以下結果。
JavaFX的Font API
使我們能夠更改字型樣式和字型大小。參考下面的程式碼實現將文字加粗並設定為紅色 -
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.DropShadow;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("");
Group root = new Group();
Scene scene = new Scene(root, 300, 250, Color.WHITE);
Group g = new Group();
Text t = new Text();
t.setCache(true);
t.setX(10.0);
t.setY(70.0);
t.setFill(Color.RED);
t.setText("JavaFX");
t.setFont(Font.font(null, FontWeight.BOLD, 32));
g.getChildren().add(t);
root.getChildren().add(g);
primaryStage.setScene(scene);
primaryStage.show();
}
}
上面的程式碼生成以下結果。
實現使用CHOCOLATE
顏色和Font.SERIF
的文字
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Title");
final Circle circ = new Circle(40, 40, 30);
final Group root = new Group(circ);
final Scene scene = new Scene(root, 800, 400, Color.BEIGE);
final Text text1 = new Text(25, 25, "From: tw511.com");
text1.setFill(Color.CHOCOLATE);
text1.setFont(Font.font(java.awt.Font.SERIF, 25));
root.getChildren().add(text1);
primaryStage.setScene(scene);
primaryStage.show();
}
}
上面的程式碼生成以下結果。
DropShadow
物件基於相對於Text
節點的x
,y
偏移量定位。因此可以設定文字陰影的顏色。
以下程式碼顯示了如何使用DropShadow
來繪製文字。
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.DropShadow;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
// from =>W w w. y i i ba i.C o M
public class Main extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("");
Group root = new Group();
Scene scene = new Scene(root, 300, 250, Color.WHITE);
Group g = new Group();
DropShadow ds = new DropShadow();
ds.setOffsetY(3.0);
ds.setColor(Color.color(0.4, 0.4, 0.4));
Text t = new Text();
t.setEffect(ds);
t.setCache(true);
t.setX(10.0);
t.setY(70.0);
t.setFill(Color.RED);
t.setText("JavaFX drop shadow...");
t.setFont(Font.font(null, FontWeight.BOLD, 32));
g.getChildren().add(t);
root.getChildren().add(g);
primaryStage.setScene(scene);
primaryStage.show();
}
}
上面的程式碼生成以下結果。
使用0.7f
作為setFraction()
方法引數並呼叫此方法,本質上是指定所希望顯示70%
的反射。
以下程式碼顯示如何在文字上使用反射效果。
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.Reflection;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.stage.Stage;
// from =>W W W.yII b Ai . c o M
public class Main extends Application {
public static void main(String[] args) {
Application.launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("");
Group root = new Group();
Scene scene = new Scene(root, 300, 250, Color.WHITE);
Text t = new Text();
t.setX(10.0);
t.setY(50.0);
t.setCache(true);
t.setText("Reflections on JavaFX...");
t.setFill(Color.RED);
t.setFont(Font.font(null, FontWeight.BOLD, 30));
Reflection r = new Reflection();
r.setFraction(0.7);
t.setEffect(r);
root.getChildren().add(t);
primaryStage.setScene(scene);
primaryStage.show();
}
}
反射值範圍從0
(0%)到1
(100%)。還可以通過setTopOffset()
方法設定不透明節點部分和反射部分之間的空間。頂部偏移預設為0
。
上面的程式碼生成以下結果。
以下程式碼顯示如何使用行分隔符對文字執行換行。
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.effect.InnerShadow;
import javafx.scene.effect.InnerShadowBuilder;
import javafx.scene.paint.Color;
import javafx.scene.text.Font;
import javafx.scene.text.FontWeight;
import javafx.scene.text.Text;
import javafx.scene.text.TextBuilder;
import javafx.stage.Stage;
public class Main extends Application {
public static void main(String[] args) {
Application.launch(args);
}// at W W w.y i I b AI .C o m
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Keyboard");
Group root = new Group();
Scene scene = new Scene(root, 530, 300, Color.WHITE);
final StringProperty statusProperty = new SimpleStringProperty();
InnerShadow iShadow = InnerShadowBuilder.create()
.offsetX(3.5f)
.offsetY(3.5f)
.build();
final Text status = TextBuilder.create()
.effect(iShadow)
.x(100)
.y(50)
.fill(Color.LIME)
.font(Font.font(null, FontWeight.BOLD, 35))
.translateY(50)
.build();
status.textProperty().bind(statusProperty);
statusProperty.set("Line\nLine2\nLine3");
root.getChildren().add(status);
primaryStage.setScene(scene);
primaryStage.show();
}
}
上面的程式碼生成以下結果。
以下程式碼顯示如何設定文字換行寬度。
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage stage) {
Group root = new Group();
Scene scene = new Scene(root, 300, 150);
stage.setScene(scene);
stage.setTitle("Sample");
Text t = new Text(10, 50, "This is a test");
t.setWrappingWidth(200);
t.setText("First row Second row Second row Second row Second row Second row ");
t.setFont(new Font(20));
root.getChildren().add(t);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
上面的程式碼生成以下結果。