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 窗口,显示指定的文本,如下所示:

Sample Application Text

示例

让我们看另一个例子,在这个例子中,我们尝试通过在所述文本上应用各种属性(如字体、大小、对齐方式等)来创建文本节点。将此代码保存在名为 **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 窗口,显示指定的文本,如下所示:

Sample Application Text

文本节点的位置和字体

您也可以在 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 窗口,显示具有其默认属性的文本。

Default Values Of Text

正如您所看到的,文本没有在应用程序中正确显示,因此提示需要设置位置和字体属性。

示例

以下程序是一个示例,演示如何在 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 窗口,显示具有指定字体的文本,如下所示:

Setting Font to Text

文本节点的描边和颜色

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 窗口,显示具有指定笔画和颜色属性的文本,如下所示:

Text Stroke Example

示例

让我们尝试为将此代码保存到名为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 Stroke Example

向 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 窗口:

Decorations Example

示例

下面的程序是一个示例,演示如何将下划线修饰应用于文本。将此代码保存到名为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 窗口:

Decorations Example
广告