Вы можете написать свою собственную функцию для добавления текста. В этом методе вы можете использовать setText
, а не appendText
, так как appendText
автоматически прокручивается до конца содержимого (setText
прокручивает к началу, но это может быть подавлено, установив обратно scrollTopProperty
в его предыдущее значение).
Пример
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
BorderPane root = new BorderPane();
Scene scene = new Scene(root,400,400);
TextArea ta = new TextArea();
root.setCenter(ta);
Button button = new Button("Append");
button.setOnAction(e -> {
appendTextToTextArea(ta, "BlaBlaBla\n");
});
root.setBottom(button);
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
/**
* Appends text to the end of the specified TextArea without moving the scrollbar.
* @param ta TextArea to be used for operation.
* @param text Text to append.
*/
public static void appendTextToTextArea(TextArea ta, String text) {
double scrollTop = ta.getScrollTop();
ta.setText(ta.getText() + text);
ta.setScrollTop(scrollTop);
}
}
Примечание:
В качестве альтернативы вы можете также расширить TextArea
и перегрузки appendText
, чтобы быть в состоянии определить, хотите ли вы, чтобы переместить полосу прокрутки:
public class AppendableTextArea extends TextArea {
public void appendText(String text, Boolean moveScrollBar) {
if (moveScrollBar)
this.appendText(text);
else {
double scrollTop = getScrollTop();
setText(getText() + text);
setScrollTop(scrollTop);
}
}
}
и использование:
AppendableTextArea ta = new AppendableTextArea();
ta.appendText("BlaBlaBla\n", false);
где мне нужно добавить этот? означает класс класса контроллера или расширенный класс Application @ user2882590 – epn
У вас есть класс контроллера, в котором вы объявили свой TextArea. Если я правильно помню, в 'public void initialize()' функция вы можете добавить этого слушателя в 'logTextArea', если он исходит из файла fxml. Если нет, то вы можете просто добавить этого слушателя после его создания. поэтому после: 'TextArea logTextArea = new TextArea();' – sundri23
Хорошо, но мой вопрос заключается в добавлении текста в текстовую область. Я прокручиваю свою кнопку до середины, после этого, когда я добавляю текст, кнопка прокрутки не будет подниматься вверх. нужно оставаться в середине, только хочу этого. Как я могу сделать ? – epn