另一个基本的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: yiibai.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();
}
}
上面的代码生成以下结果。
实例-2
使用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
。
上面的代码生成以下结果。
实例-3
以下代码显示如何使用行分隔符对文本执行换行。
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();
}
}
上面的代码生成以下结果。
实例-4
以下代码显示如何设置文本换行宽度。
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);
}
}
上面的代码生成以下结果。