【发布时间】:2019-12-15 03:56:49
【问题描述】:
如果我想防止 JTextArea 在添加文本时滚动到底部,解决方案非常简单:只需在调用 JTextArea 的 append 方法之前将插入符号的更新策略设置为 DefaultCaret.NEVER_UPDATE 即可。我正在尝试做同样的事情(加载文本而不滚动),但用于添加文本而不是附加文本。
我尝试了很多东西。其中之一是这样,但它不起作用:
public void loadMoreUp(){
caret = (DefaultCaret)ta.getCaret(); // ta is a JTextArea
caret.setUpdatePolicy(DefaultCaret.NEVER_UPDATE); //doesn't work
String s = "The new text\n";
ta.setText(s + ta.getText()); // I have also tried with ta.getDocument().insertString(0,s,null)
}
我想要的行为是“新文本”被添加到顶部,但 JTextArea 不会随之向上滚动。 “新文本”不应该是可见的,除非用户手动向上滚动查看它。
如何在不向上滚动的情况下将文本添加到 JTextArea 的顶部?如果相关,我的 JTextArea 位于 JScrollPane 中。
【问题讨论】:
-
我无法使用以下任一代码行来重现此问题:
textArea.insert("Mein Hund frisst Nuesse\n", 0);textArea.setText("Mein Hund frisst Nuesse\n" + textArea.getText());我尝试通过键入字母后跟进行重现,直到我通过了 textArea 的大小和让滚动条显示。然后我单击一个运行该代码的按钮,并且视口保持不变,显示我输入的最后一个字母。要查看前置文本,我必须手动向上滚动。 -
发布您的minimal reproducible example,展示您正在尝试做的事情以及由此产生的问题。 1)。不要使用 setText()。 2) 使用 Document.insertString(...)。
-
@MarsAtomic 我的 textArea 已将 editable 设置为 false - 也许这会有所不同?我所做的是滚动到一个大文本区域的中间,然后右键单击一个运行代码的按钮。当我单击按钮时会发生什么,所有内容都会向下移动。我正在努力寻找最简单的方法让它不移动。