警告:我们关闭这个是错误的,请投票重新打开,以便得到正确的答案!
每次我选择文本区域上的所有 (Ctrl+A) 文本时,它都会滚动到底部。
无论如何在选择所有内容的同时保持位置或可见矩形?
更新
这不是Java / Swing 的副本:JScrollPane 中的 JTextArea,如何防止自动滚动?因为在这里,textarea 中的文本没有更新,只是被选中(即全选)。
更新克娄巴特拉
(不完全符合网络礼仪,但我想你需要尽快得到答案 - 所以我在这里添加它,直到问题重新打开,然后移动:-)
您基本上需要的是自定义插入符号,但我不知道这是否是全部,因为 NavigationFilters 可能(或不会)进入:在该插入符号中,覆盖 adjustVisibilty 以有条件地滚动或不滚动到新点。一个样品:
public static class MyCaret extends DefaultCaret {
@Override
protected void adjustVisibility(Rectangle nloc) {
if (ignoreAdjustVisibility()) {
return;
}
super.adjustVisibility(nloc);
}
/**
* Returns a boolean to indicate whether to scroll the dot to visible.
* This implementation checks for all-selected, that is mark at the start
* and dot at the end.
* @return
*/
private boolean ignoreAdjustVisibility() {
return (getMark() == 0) &&
(getDot() == getComponent().getDocument().getLength());
}
}
// use in application code
JTextArea text = new JTextArea(10, 20);
DefaultCaret caret = (DefaultCaret) text.getCaret();
MyCaret myCaret = new MyCaret();
// for some reason, the blinkrate isn't installed correctly, so do it manually
myCaret.setBlinkRate(caret.getBlinkRate());
text.setCaret(myCaret);
更新
谢谢克娄巴特拉。你的解决方案有效。希望这个问题将被重新打开。