如何在setText之后滚动JavaFX TextArea

时间:2013-10-01 16:35:26

标签: scroll textarea javafx listener

我正在使用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>);
    }
});

然后我尝试按setText设置textarea的文本。但这不会滚动我的textarea。我应该补充一点,我正在加载书长字符串,但它们加载速度相当快。在设置文本然后滚动textarea之后,我还尝试在侦听器中使用1秒的延迟,这对我来说可能会起作用,这可能表明我使用了错误的侦听器。我真的希望能够使用听众而不是延迟。

欢迎所有帮助!

2 个答案:

答案 0 :(得分: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>);
         }
       }

答案 1 :(得分:0)

您应该将侦听器的代码放在单独的Thread中以进行休眠,然后使用Platform.runLater调用textArea.setScrollTop,这样sleep就不会阻塞Platform Thread。如果你没有睡眠阻止平台线程,TextArea上的任何挂起操作也将被阻止,如果任何挂起操作阻止滚动它将无法完成,你的呼叫将无效。