テキストエリアに何行のテキストがあるかを知る方法があるかどうか疑問に思っていました。また、行数の変更をリッスンできる場合。最初は 1 行だけを表示し、必要に応じて書き込み行数が増えるにつれて成長し始めるコンポーネントを開発しようとしています。十分に明確でない場合はお知らせください。
前もって感謝します。
テキストエリアに何行のテキストがあるかを知る方法があるかどうか疑問に思っていました。また、行数の変更をリッスンできる場合。最初は 1 行だけを表示し、必要に応じて書き込み行数が増えるにつれて成長し始めるコンポーネントを開発しようとしています。十分に明確でない場合はお知らせください。
前もって感謝します。
textArea の現在の行をカウントします。
文字列として:
String.valueOf(textArea.getText().split("\n").length);
整数として:
textArea.getText().split("\n").length;
System.getProperty("line.separator")
の代わりに使用できます"\n"
。
これは、最初は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);
}
結果 :
私はあなたの質問を誤解していますか?
行数を監視するには、リスナーまたはバインディングをに追加できますTextArea#textProperty
。
高さを追跡するには、実際のテキストを格納TextArea
するstyleclassを使用してサブノードの境界にリスナーを追加できます。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();
}