警告:我们在关闭时错了,请投票重新打开,以便得到正确答案!
每次我在文本区域选择所有(Ctrl + A)文本时,它都会滚动到底部。
是否仍然保留位置或可见矩形,同时仍然选择所有内容?
更新
这不是Java / Swing : JTextArea in a JScrollPane, how to prevent auto-scroll?的副本,因为在这里,textarea中的文本没有更新,只是被选中(即全选)。
更新Kleopatra
(不完全是网络礼节,但你需要一个答案,我假设 - 所以我在这里添加它,直到问题重新打开,然后移动: - )
你基本上需要的是自定义插入符号,我不知道这是不是整个故事,因为导航过滤器可能(或没有)妨碍:在该插入符中,覆盖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);
更新
谢谢kleopatra。你的解决方案是有效的。希望这个问题能够重新开放。