我正在使用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,这样睡眠就不会阻塞平台线程。如果不这样做,平台线程将被睡眠阻止,并且文本区域上的任何挂起操作也将被阻止,如果任何挂起的操作阻止滚动,它将无法完成,您的调用将作废。