我想有一个文档编辑器,其中某些文档行是不可编辑的,不可点击的等等。
我目前正在使用JTextPane作为我的编辑器以及DefaultStyledDocument和LeafElement,StyledEditorKit和ParagraphView的扩展,将文档文本解析为适当的元素并将它们分配给ParagraphView的相应扩展。到目前为止,一切都很好。
那么如何采取下一步呢?如何指定和执行某些扩展的ParagraphViews是“只读”? 我目前的方法是覆盖Leaf和Section ParagraphViews中的getNextVisualPositionFrom以防止箭头键将光标移动到受限制的ParagraphView中,但是防止鼠标在限制的ParagraphView内部单击必须单独处理。
是否有更简单,更全面的方法? 谢谢!
答案 0 :(得分:1)
经过一番研究后,一种似乎更优雅的不同方法是使用ComponentView作为不可编辑的视图,而不是ParagraphView。 然后我可以在其createComponent()方法中使用ComponentView中的JTextArea这样简单的东西,并将setEditable设置为false。
它会自动忽略该视图中的鼠标点击。当用户向上,向下,向左,向右按下时,我仍然需要包含我的代码,以便在视图上很好地跳过插入符号。否则,插入符将无形地移动基础模型文本。我还必须防止通过受保护的视图进行退格。即使视图不可编辑,下面的模型数据仍然会受到用户的影响。