我创建了一个JavaFX应用程序,我正在使用一个后台进程更新日志。所以我在文本区域中设置日志文本并使用logs.setScrollTop(Double.MAX_VALUE)
设置滚动到底部。但是滚动条设置为从底部向上一点。我还尝试了ScrollPan中的TextFlow,并使用logDisplay.setVvalue(1.0)
将滚动设置到底部。它也给出了相同的结果。
Platform.runLater(() -> {
logs.setText([setting log text]);//TextArea logs
logs.setScrollTop(Double.MAX_VALUE));
});
//For TextFlow inside ScrollPane
Platform.runLater(() -> {
logs.setText([setting log text]);//Text logs
logDisplay.setVvalue(1.0);
});
我还尝试在单独的线程中运行代码,例如
new Thread() {
public void run(){
System.out.println("called set test");
logs.setText([setting log text]);//Text logs
logDisplay.setVvalue(1.0);
}
}.start();
但没有任何效果:(
你能帮我这有什么问题吗?
谢谢
--编辑--
看起来问题是由于线程问题。滚动条值正在更新为以前的文本值。实际上,在检索滚动值时,它不是检索最新值,而是获取较旧的值,因此滚动条设置为上一条消息的末尾,而不是实际的最后一行。
我不知道这个问题的实际问题,但我找到了另一种解决方案。
我正在使用文本长度在文本末尾设置插入符号的位置。
logs.setText(logText);
logs.positionCaret(logText.length());
它正在为我工作。 :)