TextArea - 是否可以获得行数?

时间:2013-01-31 17:52:52

标签: javafx-2

我想知道是否有任何方法可以知道textarea有多少行文本。而且,如果有可能听到线路数量的变化。我正在尝试开发一个首先只显示一行的组件,然后随着写入行数的增加而开始增长。 如果不够清楚,请告诉我。

提前致谢。

3 个答案:

答案 0 :(得分:2)

计算textArea的当前行:

作为字符串:

String.valueOf(textArea.getText().split("\n").length);

作为整数:

textArea.getText().split("\n").length;
可以使用

System.getProperty("line.separator")代替"\n"

答案 1 :(得分:1)

  

首先只显示一行,然后开始增长为   必要时,随着书写行数的增加。

只需将新行文字附加到TextArea,并添加前缀换行符\n

textArea.appendText("\n This is new line Text");

示例代码:

for (int i = 1; i < 100; i++) {
            textArea.appendText("\n This is Line Number : " +i);
        }

结果:

enter image description here

我错误地解释了你的问题吗?

答案 2 :(得分:0)

要监控行数,您可以将监听器或绑定添加到TextArea#textProperty

要跟踪TextArea高度,您可以使用存储实际文本的样式库content将侦听器添加到子节点的边界。见下一个例子:

public void start(Stage primaryStage) {
    final TextArea txt = new TextArea("hi");

    // find subnode with styleclass content and add a listener to it's bounds
    txt.lookup(".content").boundsInLocalProperty().addListener(new ChangeListener<Bounds>() {
        @Override
        public void changed(ObservableValue<? extends Bounds> ov, Bounds t, Bounds t1) {
            txt.setPrefHeight(t1.getHeight());
        }
    });

    Button btn = new Button("Add");
    btn.setOnAction(new EventHandler<ActionEvent>() {
        @Override
        public void handle(ActionEvent event) {
            txt.setText(txt.getText() + "\n new line");
        }
    });

    VBox root = new VBox();
    root.getChildren().addAll(btn, txt);

    primaryStage.setScene(new Scene(root, 300, 250));
    primaryStage.show();
}