如何在 setText 之后滚动 JavaFX TextArea
Posted
技术标签:
【中文标题】如何在 setText 之后滚动 JavaFX TextArea【英文标题】:How to scroll JavaFX TextArea after setText 【发布时间】:2013-10-07 22:13:06 【问题描述】:我正在使用 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 的文本。但这不会滚动我的文本区域。我应该补充一点,我正在加载书籍长字符串,但它们加载得相当快。在设置文本然后滚动文本区域后,我还尝试在侦听器内使用 1 秒的延迟,结果证明这对我有用,这可能表明我使用了错误的侦听器。我真的希望能够为此使用监听器而不是延迟。
欢迎所有帮助!
【问题讨论】:
用Platform.runLater()
包裹滚动调用是否有效?
【参考方案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>);
【讨论】:
【参考方案2】:你应该把监听器的代码放在一个单独的线程中进行睡眠,然后使用Platform.runLater调用textArea.setScrollTop,这样睡眠不会阻塞平台线程。如果您不这样做,平台线程会被睡眠阻塞,并且 TextArea 上的任何待处理操作也将被阻塞,如果任何待处理操作阻止滚动,它将无法完成并且您的调用将被取消。
【讨论】:
以上是关于如何在 setText 之后滚动 JavaFX TextArea的主要内容,如果未能解决你的问题,请参考以下文章