2

警告:我们关闭这个是错误的,请投票重新打开,以便得到正确的答案!

每次我选择文本区域上的所有 (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);

更新

谢谢克娄巴特拉。你的解决方案有效。希望这个问题将被重新打开。

4

0 回答 0