Возврат значения из прослушивателя документов

У меня есть 2 класса Java. Один раз добавляет прослушиватель документов в документ (HTMLDoc). Другой — это класс, который реализует DocumentListener.

Я хочу иметь возможность возвращать значение этому классу, чтобы я знал, когда документ был изменен, чтобы я мог удалить нежелательный HTML-код, который вставляется и вызывает проблемы с JTextPane.

doc = (HTMLDocument) kit.createDefaultDocument();
//setContentType("text/html");
doc.addDocumentListener(new CTextPaneListener());

Это класс слушателя

public class CTextPaneListener implements DocumentListener
{

    // Gives notification that an attribute or set of attributes changed.
    @Override public void  changedUpdate(DocumentEvent e)
    {
        //System.out.println("DEBUG: changedUpdate() called");
    }

    //Gives notification that there was an insert into the document.        
    @Override public void insertUpdate(DocumentEvent e)
    {
        // I want to be able to return a value or a form a detection
        // so I can tell when there has been a insert.
    }

    //Gives notification that there was a remove from the document.                     
    @Override public void   removeUpdate(DocumentEvent e)
    {
        //System.out.println("DEBUG: removeUpdate called");
    }
}

Я немного занимался java, но прошло несколько лет, поэтому я немного заржавел. Спасибо за ваше время.

Изменить: это мой пользовательский DocumentFilter, я изначально думал, что он уловит вставку, но, похоже, только DocumentListener улавливает вставки.

public class CTextPaneFilter extends DocumentFilter
{
    public CTextPaneFilter(Document doc)
    {
        this(doc, 0);
    }

    public CTextPaneFilter(Document doc, int maxChars) {
        this.doc = doc;
        maxCharacters = maxChars;
    }       
    /**
    * Specifies the maximum text input length of the text pane.
    */
    public void setMaxLength(int len)
    {
        maxCharacters = len;
    }
    /**
    * Invoked prior to insertion of text into the specified Document. 
    */
    @Override public void insertString(DocumentFilter.FilterBypass fb, int offset,      String string, AttributeSet attr) throws BadLocationException
    {
    /**
    * Teuncates the inserted string so the contents
    * would be exactly maxCharacters in length.
    */
    System.out.println("insert");

    if (maxCharacters == 0 || (doc.getLength() + string.length()) <= maxCharacters) {
                        fb.insertString(offset, string, attr);
    } else {
        if (doc.getLength() < maxCharacters) {
            fb.insertString(offset, string.substring(0, maxCharacters - doc.getLength()), attr);
        }
    //Toolkit.getDefaultToolkit().beep();
    }
// other overridden methods below

person Jeff    schedule 16.11.2012    source источник
comment
Отформатируйте код перед публикацией   -  person Roman C    schedule 16.11.2012
comment
Как я могу на него ответить, если я его даже не читал, а у меня права редактирования не работают. Таким образом, я не могу помочь ни вам, ни другим прочитать его.   -  person Roman C    schedule 16.11.2012
comment
Вы не можете вернуть какое-либо значение (даже если это не будет интерфейс), так как это будет называться системой, и система на самом деле знает, что есть вставка.   -  person Mordechai    schedule 16.11.2012
comment
MouseEvent, я так боялся, что бы вы предложили в качестве способа решения этой проблемы?   -  person Jeff    schedule 16.11.2012
comment
@Jeff На самом деле этот вопрос лучше подходит для тех, кто любит DocumentListener, но в вашем вопросе это плохо показано.   -  person Roman C    schedule 17.11.2012


Ответы (1)


Взгляните на DocumentFilter. Это позволяет переформатировать текст перед его записью в документ.

person Russell Zahniser    schedule 16.11.2012
comment
На самом деле я изучил это, по какой-то причине в JTextPane он не распознает вставку при вставке или замене, только когда текст вводится с клавиатуры. - person Jeff; 16.11.2012
comment
Я добавил некоторый текст выше, чтобы объяснить, почему это не сработало для меня. - person Jeff; 19.11.2012