在允许可见光标移动的同时禁用JTextPane中的编辑

Gig*_*ron 4 java swing jtextpane

我有一个JTextPane通过从文件读取填充,之后数据被解析和格式化.不允许用户编辑JTextPane,但我希望他们能够使用可见光标在其中导航.

如果我使用setEditable(false),光标是不可见的,虽然可以通过按住Shift并使用箭头键选择文本块来间接观察不可见光标的位置.

要启用一个可见光标同时禁止编辑,而不是setEditable(false)我创建了一个虚拟的DocumentFilter,根本无助于它的insertString(),remove()replace()方法.但是我必须交换常规过滤器以便以编程方式填充JTextPane文件,然后在将控制返回给用户之前放回虚拟过滤器.

到目前为止,这似乎有效,但是有一个更简单的解决方案吗?如果我保留原样,是否有任何按键或鼠标活动序列可以某种方式允许用户编辑文本窗格,因为它在技术上可编辑setEditable

Bru*_*ira 5

textPane.addFocusListener(new FocusListener() {

        @Override
        public void focusLost(FocusEvent e) {
            textPane.setEditable(true);

        }

        @Override
        public void focusGained(FocusEvent e) {
            textPane.setEditable(false);

        }
    });
Run Code Online (Sandbox Code Playgroud)

又一个肮脏的黑客!它似乎提供了你所需要的!


Sta*_*avL 5

扩展DocumentFilter引入标志isAPI.如果它是假的,则阻止所有更改.当您需要以编程方式添加内容时,设置标志,添加内容,并将标志重置为false.