4

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

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

为了在不允许编辑的同时启用可见光标,setEditable(false)我创建了一个对它的 、 和方法什么都不做的虚拟对象,而DocumentFilter不是。但是随后我必须换入常规过滤器,以便以编程方式从文件中填充,然后在将控制权返回给用户之前将虚拟过滤器放回原处。insertString()remove()replace()JTextPane

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

4

4 回答 4

6
textPane.addFocusListener(new FocusListener() {

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

        }

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

        }
    });

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

于 2012-10-03T02:00:49.753 回答
5

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

于 2012-10-03T05:57:05.650 回答
3

这对我有用(结合了之前的建议):

textPane.addFocusListener(new FocusListener() {

    @Override
    public void focusGained(FocusEvent e) {
         textPane.getCaret().setVisible(true);
    }
});
于 2014-09-05T12:31:14.330 回答
2

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

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

于 2012-10-03T01:47:21.853 回答