我应该为JEditorPane事件创建一个监听器?

时间:2009-07-04 14:29:34

标签: java swing events jeditorpane

假设我在JPanel中有一个JEditorPane。我希望每次用户在JEditorPane组件中输入/粘贴文本时都能执行回调。我应该创建什么类型的听众?

3 个答案:

答案 0 :(得分:4)

您可以使用DocumentListener通知Document的任何更改。

由于我还不能留下评论,我只想说最好在可能的情况下使用监听器而不是覆盖一个类,就像上面给出的覆盖PlainDocument的例子一样。

侦听器方法适用于JTextField,JTextArea,JEditorPane或JTextPane。默认情况下,编辑器窗格使用HTMLDocument,而JTextPane使用StyledDocument。因此,您通过强制组件使用PlainDocument来丢失功能。

如果您关注的是在将文字添加到文档之前编辑文本,那么您应该使用DocumentFilter

答案 1 :(得分:3)

执行此操作的一种方法是创建自定义Document并覆盖insertString方法。例如:

class CustomDocument extends PlainDocument {
    @Override
    public void insertString(int offset, String string, AttributeSet attributeSet)
            throws BadLocationException {
        // Do something here
        super.insertString(offset, string, attributeSet);
    }
}

这允许您找出插入的内容并根据需要否决它(通过不调用super.insertString)。您可以使用以下方法应用此文档:

editorPane.setDocument(new CustomDocument());

答案 2 :(得分:2)

DocumentEvent界面中,您可以使用 getOffset() getLength()等方法来检索实际更改。

希望这有助于你