- JavaFX 教程
- JavaFX - 首页
- JavaFX - 概述
- JavaFX 安装和架构
- JavaFX - 环境
- JavaFX - 使用 Netbeans 安装
- JavaFX - 使用 Eclipse 安装
- JavaFX - 使用 Visual Studio Code 安装
- JavaFX - 架构
- JavaFX - 应用程序
- JavaFX 二维形状
- JavaFX - 二维形状
- JavaFX - 绘制直线
- JavaFX - 绘制矩形
- JavaFX - 绘制圆角矩形
- JavaFX - 绘制圆形
- JavaFX - 绘制椭圆
- JavaFX - 绘制多边形
- JavaFX - 绘制折线
- JavaFX - 绘制三次贝塞尔曲线
- JavaFX - 绘制二次贝塞尔曲线
- JavaFX - 绘制弧形
- JavaFX - 绘制 SVG 路径
- JavaFX 二维对象的属性
- JavaFX - 描边类型属性
- JavaFX - 描边宽度属性
- JavaFX - 描边填充属性
- JavaFX - 描边属性
- JavaFX - 描边线连接属性
- JavaFX - 描边斜接限制属性
- JavaFX - 描边线端点属性
- JavaFX - 平滑属性
- JavaFX 路径对象
- JavaFX - 路径对象
- JavaFX - LineTo 路径对象
- JavaFX - HLineTo 路径对象
- JavaFX - VLineTo 路径对象
- JavaFX - QuadCurveTo 路径对象
- JavaFX - CubicCurveTo 路径对象
- JavaFX - ArcTo 路径对象
- JavaFX 颜色和纹理
- JavaFX - 颜色
- JavaFX - 线性渐变图案
- JavaFX - 径向渐变图案
- JavaFX 文本
- JavaFX - 文本
- JavaFX 特效
- JavaFX - 特效
- JavaFX - 颜色调整特效
- JavaFX - 颜色输入特效
- JavaFX - 图片输入特效
- JavaFX - 混合特效
- JavaFX - 辉光特效
- JavaFX - 泛光特效
- JavaFX - 方框模糊特效
- JavaFX - 高斯模糊特效
- JavaFX - 运动模糊特效
- JavaFX - 反射特效
- JavaFX - 棕褐色特效
- JavaFX - 阴影特效
- JavaFX - 投影阴影特效
- JavaFX - 内阴影特效
- JavaFX - 光照特效
- JavaFX - 远光源特效
- JavaFX - 聚光灯特效
- JavaFX - 点光源特效
- JavaFX - 位移贴图
- JavaFX - 透视变换
- JavaFX 动画
- JavaFX - 动画
- JavaFX - 旋转动画
- JavaFX - 缩放动画
- JavaFX - 平移动画
- JavaFX - 淡入淡出动画
- JavaFX - 填充动画
- JavaFX - 描边动画
- JavaFX - 顺序动画
- JavaFX - 并行动画
- JavaFX - 暂停动画
- JavaFX - 路径动画
- JavaFX 图片
- JavaFX - 图片
- JavaFX 三维形状
- JavaFX - 三维形状
- JavaFX - 创建长方体
- JavaFX - 创建圆柱体
- JavaFX - 创建球体
- JavaFX 事件处理
- JavaFX - 事件处理
- JavaFX - 使用便捷方法
- JavaFX - 事件过滤器
- JavaFX - 事件处理器
- JavaFX UI 控件
- JavaFX - UI 控件
- JavaFX - 列表视图
- JavaFX - 手风琴
- JavaFX - 按钮栏
- JavaFX - 选择框
- JavaFX - HTML 编辑器
- JavaFX - 菜单栏
- JavaFX - 分页
- JavaFX - 进度指示器
- JavaFX - 滚动面板
- JavaFX - 分隔符
- JavaFX - 滑块
- JavaFX - 微调器
- JavaFX - 分割面板
- JavaFX - 表格视图
- JavaFX - 标签页面板
- JavaFX - 工具栏
- JavaFX - 树视图
- JavaFX - 标签
- JavaFX - 复选框
- JavaFX - 单选按钮
- JavaFX - 文本字段
- JavaFX - 密码字段
- JavaFX - 文件选择器
- JavaFX - 超链接
- JavaFX - 工具提示
- JavaFX - 警报框
- JavaFX - 日期选择器
- JavaFX - 文本区域
- JavaFX 图表
- JavaFX - 图表
- JavaFX - 创建饼状图
- JavaFX - 创建折线图
- JavaFX - 创建面积图
- JavaFX - 创建条形图
- JavaFX - 创建气泡图
- JavaFX - 创建散点图
- JavaFX - 创建堆叠面积图
- JavaFX - 创建堆叠条形图
- JavaFX 布局面板
- JavaFX - 布局面板
- JavaFX - HBox 布局
- JavaFX - VBox 布局
- JavaFX - BorderPane 布局
- JavaFX - StackPane 布局
- JavaFX - TextFlow 布局
- JavaFX - AnchorPane 布局
- JavaFX - TilePane 布局
- JavaFX - GridPane 布局
- JavaFX - FlowPane 布局
- JavaFX CSS
- JavaFX - CSS
- JavaFX 中的媒体
- JavaFX - 处理媒体
- JavaFX - 播放视频
- JavaFX 有用资源
- JavaFX - 快速指南
- JavaFX - 有用资源
- JavaFX - 讨论
JavaFX - 文本
一个 JavaFX 应用程序可以包含许多元素,包括各种媒体,如图像、视频、GIF 和各种维度的形状、文本等。这是为了提高应用程序的用户体验质量。所有这些元素都由 JavaFX 场景图上的节点表示。
前面我们学习了如何创建二维和三维形状。但是你也可以在 JavaFX 应用程序中创建文本元素。文本元素由一个单独的节点表示,并且可以根据其字体、大小、颜色和其他一些属性进行更改。
在本章中,我们将学习如何使用 JavaFX 在应用程序上显示文本节点。
JavaFX 文本节点
JavaFX 中的文本节点由名为 **Text** 的类表示,该类属于 **javafx.scene.text** 包。
此类包含多个属性,用于在 JavaFX 中创建文本并修改其外观。此类还继承 **Shape** 类,该类属于 **javafx.scene.shape** 包。
因此,除了文本的属性(如字体、对齐方式、行距、文本等)之外,它还继承了基本的形状节点属性,例如 **strokeFill**、**stroke**、**strokeWidth**、**strokeType** 等。
创建文本节点
由于 **javafx.scene.text** 包的 **Text** 类表示 JavaFX 中的文本节点,因此您可以通过实例化此类来创建文本,如下所示:
Text text = new Text();
**Text** 类包含一个名为 **text** 的字符串类型属性,它表示要创建的文本。
实例化 **Text** 类后,需要使用 **setText()** 方法为该属性设置值,如下所示。
String text = "Hello how are you" Text.setText(text);
您还可以通过为 x 和 y 属性指定值来设置文本的位置(原点),使用它们各自的 setter 方法,即 **setX()** 和 **setY()**,如下面的代码块所示:
text.setX(50); text.setY(50);
示例
以下程序是一个示例,演示如何在 JavaFX 中创建文本节点。将此代码保存在名为 **TextExample.java** 的文件中。
import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.stage.Stage; import javafx.scene.text.Text; public class TextExample extends Application { @Override public void start(Stage stage) { //Creating a Text object Text text = new Text(); //Setting the text to be added. text.setText("Hello how are you"); //setting the position of the text text.setX(50); text.setY(50); //Creating a Group object Group root = new Group(text); //Creating a scene object Scene scene = new Scene(root, 600, 300); //Setting title to the Stage stage.setTitle("Sample Application"); //Adding scene to the stage stage.setScene(scene); //Displaying the contents of the stage stage.show(); } public static void main(String args[]){ launch(args); } }
使用以下命令从命令提示符编译并执行保存的 java 文件。
javac --module-path %PATH_TO_FX% --add-modules javafx.controls TextExample.java java --module-path %PATH_TO_FX% --add-modules javafx.controls TextExample
输出
执行上述程序后,将生成一个 JavaFX 窗口,显示指定的文本,如下所示:
示例
让我们看另一个例子,在这个例子中,我们尝试通过在所述文本上应用各种属性(如字体、大小、对齐方式等)来创建文本节点。将此代码保存在名为 **TextExample1.java** 的文件中。
import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.stage.Stage; import javafx.scene.text.*; public class TextExample1 extends Application { @Override public void start(Stage stage) { //Creating a Text object Text text = new Text(); text.setFont(new Font(20)); text.setWrappingWidth(200); text.setTextAlignment(TextAlignment.JUSTIFY); text.setText("This is Paragraph 1\nThis is Paragraph 2"); //setting the position of the text text.setX(50); text.setY(130); //Creating a Group object Group root = new Group(text); //Creating a scene object Scene scene = new Scene(root, 600, 300); //Setting title to the Stage stage.setTitle("Sample Application"); //Adding scene to the stage stage.setScene(scene); //Displaying the contents of the stage stage.show(); } public static void main(String args[]){ launch(args); } }
使用以下命令从命令提示符编译并执行保存的 java 文件。
javac --module-path %PATH_TO_FX% --add-modules javafx.controls TextExample1.java java --module-path %PATH_TO_FX% --add-modules javafx.controls TextExample1
输出
执行上述程序后,将生成一个 JavaFX 窗口,显示指定的文本,如下所示:
文本节点的位置和字体
您也可以在 JavaFX 应用程序中添加文本节点。但是,任何可以添加的文本都有一些默认值,例如文本的大小、字体及其颜色(黑色)。但是,有必要更改默认值,因为它们并不适用于所有场景。
例如,JavaFX 应用程序中文本节点的默认位置从屏幕开头开始。但是,当文本内容较长并且超出显示范围时,就需要更改其位置以正确显示所有内容。
更改文本的位置和字体还可以使用户能够根据自己的需求开发应用程序。
setFont() 方法
您可以使用 **setFont()** 方法更改文本的字体大小和颜色。此方法接受 **Font** 类的对象。
名为 **Font** 的类(属于 **javafx.scene.text** 包)用于定义文本的字体。此类包含一个名为 **font()** 的静态方法。
此方法接受四个参数,即:
**family** - 这是字符串类型,表示我们想要应用于文本的字体的族。
**weight** - 此属性表示字体的粗细。它接受 9 个值,即 - **FontWeight.BLACK, FontWeight.BOLD, FontWeight.EXTRA_BOLD, FontWeight.EXTRA_LIGHT, LIGHT, MEDIUM, NORMAL, SEMI_BOLD, THIN**。
**posture** - 此属性表示字体姿态(常规或斜体)。它接受两个值 **FontPosture.REGULAR** 和 **FontPosture.ITALIC**。
**size** - 此属性的类型为 double,表示字体的尺寸。
您可以使用以下方法将字体设置为文本:
text.setFont(Font.font("verdana", FontWeight.BOLD, FontPosture.REGULAR, 20));
示例
在尝试设置所需位置和字体之前,让我们来看一个在 JavaFX 应用程序中使用文本节点的默认属性的程序。
将此代码保存在名为 **TextDefault.java** 的文件中。
import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.stage.Stage; import javafx.scene.text.*; public class TextDefault extends Application { @Override public void start(Stage stage) { //Creating a Text object Text text = new Text(); //Setting the text to be added. text.setText("Hi how are you"); //Creating a Group object Group root = new Group(text); //Creating a scene object Scene scene = new Scene(root, 600, 300); //Setting title to the Stage stage.setTitle("Default text"); //Adding scene to the stage stage.setScene(scene); //Displaying the contents of the stage stage.show(); } public static void main(String args[]){ launch(args); } }
使用以下命令从命令提示符编译并执行保存的 Java 文件。
javac --module-path %PATH_TO_FX% --add-modules javafx.controls TextDefault.java java --module-path %PATH_TO_FX% --add-modules javafx.controls TextDefault
输出
执行上述程序后,将生成一个 JavaFX 窗口,显示具有其默认属性的文本。
正如您所看到的,文本没有在应用程序中正确显示,因此提示需要设置位置和字体属性。
示例
以下程序是一个示例,演示如何在 JavaFX 中设置文本节点的字体。在这里,我们将字体设置为 Verdana,粗细为粗体,姿态为常规,大小为 20。
将此代码保存在名为 **TextFontExample.java** 的文件中。
import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.stage.Stage; import javafx.scene.text.Font; import javafx.scene.text.FontPosture; import javafx.scene.text.FontWeight; import javafx.scene.text.Text; public class TextFontExample extends Application { @Override public void start(Stage stage) { //Creating a Text object Text text = new Text(); //Setting font to the text text.setFont(Font.font("verdana", FontWeight.BOLD, FontPosture.REGULAR, 20)); //setting the position of the text text.setX(50); text.setY(130); //Setting the text to be added. text.setText("Hi how are you"); //Creating a Group object Group root = new Group(text); //Creating a scene object Scene scene = new Scene(root, 600, 300); //Setting title to the Stage stage.setTitle("Setting Font to the text"); //Adding scene to the stage stage.setScene(scene); //Displaying the contents of the stage stage.show(); } public static void main(String args[]){ launch(args); } }
使用以下命令从命令提示符编译并执行保存的 java 文件。
javac --module-path %PATH_TO_FX% --add-modules javafx.controls TextFontExample.java java --module-path %PATH_TO_FX% --add-modules javafx.controls TextFontExample
输出
执行上述程序后,将生成一个 JavaFX 窗口,显示具有指定字体的文本,如下所示:
文本节点的描边和颜色
JavaFX 中的每个节点都有一些默认值,关于它们如何显示和定位。例如,任何 3D 形状(如长方体、圆柱体、球体等)都具有浅灰色的漫反射颜色作为其默认颜色。
您还可以更改 JavaFX Text 节点的默认值。Text 节点可以通过多种方式设计:下划线、粗体、斜体,文本也可以使用双线或更粗的线书写等。所有这些改进都可以在 JavaFX 应用程序中实现。
setFill() 方法
Text 类也继承了包中的 Shape 类。因此,您可以使用javafx.scene.shape,它也可以为文本节点设置笔画和颜色。
您可以使用 shape(继承)类的setFill()方法设置文本颜色,如下所示:
text.setFill(Color.BEIGE);
同样,您可以使用setStroke()方法设置文本的笔画颜色。而笔画的宽度可以使用setStrokeWidth()方法设置,如下所示:
//Setting the color text.setFill(Color.BROWN); //Setting the Stroke text.setStrokeWidth(2); //Setting the stroke color text.setStroke(Color.BLUE);
示例
下面的程序是一个示例,演示如何设置文本节点的 strokeWidth。在此代码中,我们将笔画宽度设置为“2”。
将此代码保存到名为StrokeExample.java的文件中。
import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.stage.Stage; import javafx.scene.paint.Color; import javafx.scene.text.Font; import javafx.scene.text.FontPosture; import javafx.scene.text.FontWeight; import javafx.scene.text.Text; public class StrokeExample extends Application { @Override public void start(Stage stage) { //Creating a Text object Text text = new Text(); //Setting font to the text text.setFont(Font.font("verdana", FontWeight.BOLD, FontPosture.REGULAR, 50)); //setting the position of the text text.setX(50); text.setY(130); //Setting the Stroke text.setStrokeWidth(2); // Setting the stroke color text.setStroke(Color.BLUE); //Setting the text to be added. text.setText("Hi how are you"); //Creating a Group object Group root = new Group(text); //Creating a scene object Scene scene = new Scene(root, 600, 300); //Setting title to the Stage stage.setTitle("Setting font to the text"); //Adding scene to the stage stage.setScene(scene); //Displaying the contents of the stage stage.show(); } public static void main(String args[]){ launch(args); } }
使用以下命令从命令提示符编译并执行保存的 java 文件。
javac --module-path %PATH_TO_FX% --add-modules javafx.controls StrokeExample.java java --module-path %PATH_TO_FX% --add-modules javafx.controls StrokeExample
输出
执行上述程序后,将生成一个 JavaFX 窗口,显示具有指定笔画和颜色属性的文本,如下所示:
示例
让我们尝试为将此代码保存到名为ColorExample.java的文件中。
import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.scene.paint.Color; import javafx.stage.Stage; import javafx.scene.text.*; public class ColorExample extends Application { @Override public void start(Stage stage) { //Creating a Text object Text text = new Text(); //Setting font to the text text.setFont(Font.font("Times New Roman", FontWeight.LIGHT, FontPosture.REGULAR, 20)); //setting the position of the text text.setX(50); text.setY(130); //Setting the color text.setFill(Color.BROWN); //Setting the text to be added. text.setText("Hi how are you"); //Creating a Group object Group root = new Group(text); //Creating a scene object Scene scene = new Scene(root, 600, 300); //Setting title to the Stage stage.setTitle("Setting font to the text"); //Adding scene to the stage stage.setScene(scene); //Displaying the contents of the stage stage.show(); } public static void main(String args[]){ launch(args); } }
使用以下命令从命令提示符编译并执行保存的 java 文件。
javac --module-path %PATH_TO_FX% --add-modules javafx.controls ColorExample.java java --module-path %PATH_TO_FX% --add-modules javafx.controls ColorExample
输出
执行上述程序后,将生成一个 JavaFX 窗口,显示具有指定笔画和颜色属性的文本,如下所示:
向 Text 节点应用修饰
您还可以应用修饰,例如删除线(在文本中穿过一条线)和下划线,可以使用Text类的方法。
您可以使用setStrikethrough()方法删除文本。此方法接受布尔值,向此方法传递值true即可删除文本,如下面的代码框所示:
//Striking through the text text1.setStrikethrough(true);
同样,您可以通过向setUnderLine()方法传递值true来为文本添加下划线,如下所示:
//underlining the text text2.setUnderline(true);
示例
下面的程序是一个示例,演示如何将删除线修饰应用于文本。将此代码保存到名为StrikeThroughExample.java的文件中。
import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.stage.Stage; import javafx.scene.text.*; public class StrikeThroughExample extends Application { @Override public void start(Stage stage) { //Creating a Text_Example object Text text1 = new Text("Welcome to Tutorialspoint"); //Setting font to the text text1.setFont(Font.font("verdana", FontWeight.BOLD, FontPosture.REGULAR, 20)); //setting the position of the text text1.setX(50); text1.setY(75); //strike through the text text1.setStrikethrough(true); //Creating a Group object Group root = new Group(text1); //Creating a scene object Scene scene = new Scene(root, 600, 300); //Setting title to the Stage stage.setTitle("Strike Through Decoration Example"); //Adding scene to the stage stage.setScene(scene); //Displaying the contents of the stage stage.show(); } public static void main(String args[]){ launch(args); } }
使用以下命令从命令提示符编译并执行保存的 Java 文件。
javac --module-path %PATH_TO_FX% --add-modules javafx.controls StrikeThroughExample.java java --module-path %PATH_TO_FX% --add-modules javafx.controls StrikeThroughExample
输出
执行上述程序后,将生成如下所示的 JavaFX 窗口:
示例
下面的程序是一个示例,演示如何将下划线修饰应用于文本。将此代码保存到名为UnderlinesExample.java的文件中。
import javafx.application.Application; import javafx.scene.Group; import javafx.scene.Scene; import javafx.stage.Stage; import javafx.scene.text.*; public class UnderlinesExample extends Application { @Override public void start(Stage stage) { //Creating a Text_Example object Text text1 = new Text("Welcome to Tutorialspoint"); //Setting font to the text text1.setFont(Font.font("verdana", FontWeight.BOLD, FontPosture.REGULAR, 20)); //setting the position of the text text1.setX(50); text1.setY(75); //underlining the text text1.setUnderline(true); //Creating a Group object Group root = new Group(text1); //Creating a scene object Scene scene = new Scene(root, 600, 300); //Setting title to the Stage stage.setTitle("Underline Decoration Example"); //Adding scene to the stage stage.setScene(scene); //Displaying the contents of the stage stage.show(); } public static void main(String args[]){ launch(args); } }
使用以下命令从命令提示符编译并执行保存的 Java 文件。
javac --module-path %PATH_TO_FX% --add-modules javafx.controls UnderlinesExample.java java --module-path %PATH_TO_FX% --add-modules javafx.controls UnderlinesExample
输出
执行上述程序后,将生成如下所示的 JavaFX 窗口: