css - JavaFX:获取TextArea的行高

标签 css javafx textarea

我有一个窗口/舞台和一个 TextArea,它将根据 TextArea 内文本的长度调整大小(文本被换行)。这意味着,窗口越小,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();

关于css - JavaFX:获取TextArea的行高,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27818470/

相关文章:

javascript - 跨不同容器 div 的 ngFor 数据长度为 4

css - 在非移动浏览器中缩放视口(viewport)

java - 兼容 MIME 媒体类型的已注册邮件正文阅读器为 : application/json;charset=UTF-8

javafx - 使用 jfx 解析 CSS 时如何修复 out-of-place 'expected RBRACE' 错误?

css - 如何垂直居中 input/textarea 元素,其中多行文本仍环绕在下方?

javascript - CodeMirror 在编辑器文本区域上使用 jQuery .keyup

css - ie6 css显示不正确

javascript - 单击时在图像按钮上显示加载动画

java - 使用 tableview 的正确方法是什么?

textarea - 按 Enter 键时在文本区域中启用换行或换行