另一个基本的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)
}
}
上面的代码生成以下结果。