我正在使用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秒的延迟,这对我来说可能会起作用,这可能表明我使用了错误的侦听器。我真的希望能够使用听众而不是延迟。
欢迎所有帮助!
答案 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上的任何挂起操作也将被阻止,如果任何挂起操作阻止滚动它将无法完成,你的呼叫将无效。