3

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

我尝试先在我的 textarea 上设置一个侦听器,然后在其中使用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>);
    }
});

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

欢迎所有帮助!

4

2 回答 2

0

如果您使用此代码会发生什么?

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>);
         }
       }
于 2014-06-11T16:49:10.947 回答
0

您应该将监听器的代码放在单独的线程中进行睡眠,然后使用 Platform.runLater 调用 textArea.setScrollTop,这样睡眠不会阻塞平台线程。如果您不这样做,则平台线程被睡眠阻塞,并且 TextArea 上的任何挂起操作也将被阻塞,如果任何挂起操作阻止滚动,它将无法完成并且您的调用将被取消。

于 2016-07-04T20:22:00.217 回答