JTextArea禁用滚动选择全部

时间:2012-07-25 09:27:52

标签: java swing jtextarea

警告:我们在关闭时错了,请投票重新打开,以便得到正确答案!

每次我在文本区域选择所有(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。你的解决方案是有效的。希望这个问题能够重新开放。

0 个答案:

没有答案