如何在 setText 之后滚动 JavaFX TextArea



我正在使用JavaFX,我想在先设置文本区域的文本后将文本区域滚动到顶部的某个位置。

我尝试首先在我的文本区域设置一个侦听器,并在其中使用 setText

    textArea.textProperty().addListener(new ChangeListener<String>() {
        @Override
        public void changed(final ObservableValue<? extends String> observable, final String oldValue, final String newValue) {
        textArea.setScrollTop(<Here I use the scroll position that I want>);
    }
});

然后我尝试通过setText设置文本区域的文本。但这不会滚动我的文本区域。我应该补充一点,我正在加载书中的长字符串,但它们加载得相当快。在设置文本然后滚动文本区域后,我还尝试在侦听器内使用 1 秒的延迟,结果证明这对我有用,这可能表明我使用了错误的侦听器。我真的希望能够为此使用侦听器,而不是延迟。

欢迎所有帮助!

如果你使用这个代码会发生什么?

textarea.addEventHandler(KeyEvent.KEY_TYPED, new EventHandler<KeyEvent>() {
        @Override
        public void handle(KeyEvent t) {
        //textArea.setScrollTop(<Here I use the scroll position that I want>);
         }
       }
您应该将

侦听器的代码放在单独的线程中以使睡眠,然后使用 Platform.runLater 调用 textArea.setScrollTop,这样睡眠就不会阻塞平台线程。如果不这样做,平台线程将被睡眠阻止,并且文本区域上的任何挂起操作也将被阻止,如果任何挂起的操作阻止滚动,它将无法完成,您的调用将作废。

最新更新