我有一个程序可以将大量文本输出到我在我的应用程序中用作控制台的文本区域。
输出实时建筑信息。
默认情况下,它向下滚动到底部,这很不错,但我希望能够抓住滚动条并向上文本区域以检查文本仍然附加到文本区域时发生了什么。
我的问题是当我抓住滚动条时我怎么能禁用自动滚动?
理想情况是: 如果滚动条回到最后,则自动滚动 当我将滚动条向上移动时禁用自动滚动,因为当文本一直跳到最后时,它很难读取任何内容。
这是我的文字区域追加器
private void run(final TextArea console) {
try {
console.clear();
BufferedReader stdInput;
stdInput = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = stdInput.readLine()) != null) {
String feed = line;
Platform.runLater(() -> console.appendText(feed + "\n"));
}
} catch (Exception e) {
console.appendText(e.toString());
}
}
答案 0 :(得分:1)
我有同样的问题,这解决了它。基本上在文本更新之前/之后获取滚动位置并确保它们相同:
Platform.runLater(() -> {
double pos = console.getScrollTop();
int anchor = console.getAnchor();
int caret = console.getCaretPosition();
console.appendText(feed + '\n');
console.setScrollTop(pos);
console.selectRange(anchor, caret);
});
注意:这是使用.setText()测试的,但不是使用appendText()
编辑:添加选择代码 - 没有它,它将具有未定义的行为