JavaFX - TextFlow 布局



JavaFX 中的 TextFlow 布局

TextFlow 是一种布局,它允许我们在单个流中设置多个文本节点,并根据 TextFlow 的字体、宽度和行间距调整其位置和对齐方式。它还可以嵌入对象,例如图像或形状,这些对象可以插入文本内容中。名为 textFlowjavafx.scene.layout 包中的类表示文本流。要创建 TextFlow,我们可以使用下面列出的其中一个构造函数:

  • TextFlow() - 创建一个空的 TextFlow。

  • TextFlow(Node childNodes) - 使用给定的节点作为子节点创建 TextFlow。

要自定义 TextFlow 的外观和行为,此类提供了两个属性,如下所示:

  • lineSpacing - 此属性为双精度类型,用于定义文本对象之间的间距。您可以使用名为 setLineSpacing() 的方法设置此属性。

  • textAlignment - 此属性表示窗格中文本对象的对齐方式。您可以使用 setTextAlignment() 方法为该属性设置值。在此方法中,您可以传递四个值:CENTER、JUSTIFY、LEFT、RIGHT。

示例

以下程序是文本流布局的示例。在此,我们使用字体 15 创建三个文本对象。将此代码保存在名为 TextFlowExample.java 的文件中。

import javafx.application.Application; 
import javafx.scene.Scene; 
import javafx.scene.paint.Color; 
import javafx.scene.text.Font; 
import javafx.scene.text.Text; 
import javafx.scene.text.TextAlignment; 
import javafx.scene.text.TextFlow; 
import javafx.stage.Stage; 
         
public class TextFlowExample extends Application { 
   @Override 
   public void start(Stage stage) {                     
      //Creating text objects  
      Text text1 = new Text("Welcome to Tutorialspoint "); 
      
      //Setting font to the text 
      text1.setFont(new Font(15)); 
      
      //Setting color to the text  
      text1.setFill(Color.DARKSLATEBLUE); 
       
      Text text2 = new Text("We provide free tutorials for readers in various technologies  "); 
      
      //Setting font to the text 
      text2.setFont(new Font(15)); 
      
      //Setting color to the text 
      text2.setFill(Color.DARKGOLDENROD); 
      Text text3 = new Text("\n Recently we started free video tutorials too "); 
      
      //Setting font to the text 
      text3.setFont(new Font(15)); 
      
      //Setting color to the text 
      text3.setFill(Color.DARKGRAY); 
       
      Text text4 = new Text("We believe in easy learning"); 
      
      //Setting font to the text 
      text4.setFont(new Font(15)); 
      text4.setFill(Color.MEDIUMVIOLETRED); 
       
      //Creating the text flow plane 
      TextFlow textFlowPane = new TextFlow(); 
       
      //Setting the line spacing between the text objects 
      textFlowPane.setTextAlignment(TextAlignment.JUSTIFY); 
       
      //Setting the width  
      textFlowPane.setPrefSize(600, 300); 
       
      //Setting the line spacing  
      textFlowPane.setLineSpacing(5.0); 
      
      //Adding cylinder to the pane  
      textFlowPane.getChildren().addAll(text1, text2, text3, text4);        
         
      //Creating a scene object 
      Scene scene = new Scene(textFlowPane, 400, 300);  
      
      //Setting title to the Stage 
      stage.setTitle("Textflow Layout in JavaFX");
      
      //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 TextFlowExample.java 
java --module-path %PATH_TO_FX% --add-modules javafx.controls TextflowExample

输出

执行上述程序后,将生成一个 JavaFX 窗口,如下所示。

TextFlow

向 TextFlow 添加图像

也可以在 TextFlow 中嵌入图像。这是通过使用 JavaFX 的 ImageImageView 类实现的。我们只需要实例化这些类并将 ImageView 对象传递给 TextFlow 类的构造函数,如下面的示例所示。将此代码保存在名为 JavafxTextflow.java 的 Java 文件中。

示例

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.VBox;
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;
import javafx.scene.text.TextAlignment;
import javafx.scene.text.TextFlow;
import javafx.stage.Stage;

public class JavafxTextflow extends Application {
   @Override
   public void start(Stage stage) {
      // Create some text nodes with different styles
      Text text1 = new Text("Hello");
      text1.setFill(Color.RED);
      text1.setFont(Font.font("Arial", FontWeight.BOLD, 20));

      Text text2 = new Text("JavaFX");
      text2.setFill(Color.BLUE);
      text2.setFont(Font.font("Arial", FontPosture.ITALIC, 20));

      Text text3 = new Text("\nThis is a ");
      text3.setFill(Color.BLACK);
      text3.setFont(Font.font("Arial", 16));

      Text text4 = new Text("TextFlow");
      text4.setFill(Color.GREEN);
      text4.setFont(Font.font("Arial", FontWeight.BOLD, FontPosture.ITALIC, 16));

      Text text5 = new Text(" example.");
      text5.setFill(Color.BLACK);
      text5.setFont(Font.font("Arial", 16));

      // Create an image node
      Image image = new Image("faviconTP.png");
      ImageView imageView = new ImageView(image);
      imageView.setFitWidth(100);
      imageView.setPreserveRatio(true);

      // Create a text flow with the text nodes and the image node
      TextFlow textFlow = new TextFlow(text1, text2, text3, text4, text5, imageView);

      // Set some properties of the text flow
      textFlow.setLineSpacing(10);
      textFlow.setTextAlignment(TextAlignment.CENTER);
      textFlow.setPrefWidth(300);

      // Create a scene and a stage
      Scene scene = new Scene(textFlow, 400, 300);
      stage.setTitle("TextFlow Example");
      stage.setScene(scene);
      stage.show();
   }
   public static void main(String[] args) {
      launch(args);
   }
}

要从命令提示符编译并执行保存的 java 文件,请使用以下命令。

javac --module-path %PATH_TO_FX% --add-modules javafx.controls JavafxTextflow.java 
java --module-path %PATH_TO_FX% --add-modules javafx.controls JavafxTextflow

输出

执行上述 Java 代码后,它将生成一个 JavaFX 窗口,如下所示。

TextFlow output
广告