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

时间:2012-10-03 01:02:07

标签: java swing jtextpane

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

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

要在取消编辑时启用可见光标,而不是setEditable(false)我创建了一个虚拟DocumentFilter,它对insertString()remove()和{{1 }} 方法。但是我必须交换一个常规过滤器,以便以编程方式从文件中填充replace(),然后在将控制权返回给用户之前将虚拟过滤器放回去。

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

4 个答案:

答案 0 :(得分:5)

textPane.addFocusListener(new FocusListener() {

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

        }

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

        }
    });

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

答案 1 :(得分:5)

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

答案 2 :(得分:3)

这对我来说很有用(结合以前的建议):

textPane.addFocusListener(new FocusListener() {

    @Override
    public void focusGained(FocusEvent e) {
         textPane.getCaret().setVisible(true);
    }
});

答案 3 :(得分:2)

这可能是一个肮脏,肮脏的黑客,但我让这个工作。

将文本窗格设置为不可编辑后,使用textPane.getCaret().setVisible(true)重新启用插入符号