JavaFX:获取TextArea的行高
JavaFX: Get line height of TextArea
我有一个 window/stage 和一个 TextArea,它将根据 TextArea 内文本的长度调整大小(文本被换行)。这意味着,window 越小,TextArea 中的文本就越少。 TextArea 的宽度是给定的。为了计算 TextArea 的高度,我使用文本的长度、TextArea 的给定宽度和行高。例如:
double height=textwidth/agreement.getWidth()*18;
在这种情况下,行高由静态值定义。但是行高必须是可变的,具体取决于 css 文件中的定义,因为如果字体大小的定义发生变化,行高也会发生变化。因此,我需要确定 TextArea 的行高才能使用它而不是使用静态值。那么,如何获取 TextArea 的行高呢?
舞台显示后,您可以找到文本区域中呈现的文本的确切尺寸:
@Override
public void start(Stage primaryStage) {
TextArea area = new TextArea("This is some random very long text");
area.setWrapText(true);
area.setPrefWidth(200);
area.setMaxWidth(200);
area.setStyle("-fx-font: 18pt Arial");
StackPane root = new StackPane(area);
Scene scene = new Scene(root, 300, 250);
primaryStage.setScene(scene);
primaryStage.show();
Text t = (Text)area.lookup(".text");
System.out.println("LayoutX "+t.getLayoutX());
System.out.println("LayoutY "+t.getLayoutY());
System.out.println("Width: "+t.getBoundsInLocal().getWidth());
System.out.println("Height: "+t.getBoundsInLocal().getHeight());
}
根据这些维度,您可以进行计算。
编辑
您可以在展示舞台之前获取尺寸,但为此您需要将 CSS 样式应用于根和子级并在场景中强制布局:
Scene scene = new Scene(root, 300, 250);
root.applyCss();
root.layout();
Text t = (Text)root.lookup(".text");
System.out.println("LayoutX "+t.getLayoutX());
System.out.println("LayoutY "+t.getLayoutY());
System.out.println("Width: "+t.getBoundsInLocal().getWidth());
System.out.println("Height: "+t.getBoundsInLocal().getHeight());
// Now calculations can be performed
primaryStage.setScene(scene);
primaryStage.show();
我有一个 window/stage 和一个 TextArea,它将根据 TextArea 内文本的长度调整大小(文本被换行)。这意味着,window 越小,TextArea 中的文本就越少。 TextArea 的宽度是给定的。为了计算 TextArea 的高度,我使用文本的长度、TextArea 的给定宽度和行高。例如:
double height=textwidth/agreement.getWidth()*18;
在这种情况下,行高由静态值定义。但是行高必须是可变的,具体取决于 css 文件中的定义,因为如果字体大小的定义发生变化,行高也会发生变化。因此,我需要确定 TextArea 的行高才能使用它而不是使用静态值。那么,如何获取 TextArea 的行高呢?
舞台显示后,您可以找到文本区域中呈现的文本的确切尺寸:
@Override
public void start(Stage primaryStage) {
TextArea area = new TextArea("This is some random very long text");
area.setWrapText(true);
area.setPrefWidth(200);
area.setMaxWidth(200);
area.setStyle("-fx-font: 18pt Arial");
StackPane root = new StackPane(area);
Scene scene = new Scene(root, 300, 250);
primaryStage.setScene(scene);
primaryStage.show();
Text t = (Text)area.lookup(".text");
System.out.println("LayoutX "+t.getLayoutX());
System.out.println("LayoutY "+t.getLayoutY());
System.out.println("Width: "+t.getBoundsInLocal().getWidth());
System.out.println("Height: "+t.getBoundsInLocal().getHeight());
}
根据这些维度,您可以进行计算。
编辑
您可以在展示舞台之前获取尺寸,但为此您需要将 CSS 样式应用于根和子级并在场景中强制布局:
Scene scene = new Scene(root, 300, 250);
root.applyCss();
root.layout();
Text t = (Text)root.lookup(".text");
System.out.println("LayoutX "+t.getLayoutX());
System.out.println("LayoutY "+t.getLayoutY());
System.out.println("Width: "+t.getBoundsInLocal().getWidth());
System.out.println("Height: "+t.getBoundsInLocal().getHeight());
// Now calculations can be performed
primaryStage.setScene(scene);
primaryStage.show();