Добавление текста в JTextPane из другого класса

Я пытаюсь добавить строки в JTextPane из другого класса, но он не обновляет JTextPane. Я пробовал потоки, и теперь я склоняюсь к прослушивателю документов или фильтру документов. По-видимому, DocumentFilter предназначен для обновления документов JTextPane, но возможно ли сделать это из другого класса и обновить его по мере добавления строк? Я пробовал что-то вроде:

textPane.insertString(FilterBypass fb, int offs,String str, AttributeSet a) 

но NetBeans не распознает параметры. Спасибо за вашу помощь.

* некоторое уточнение, под обновлением я подразумеваю, что оно фактически показывает изменение в JTextPane.


person Cameron Roberson    schedule 10.10.2013    source источник


Ответы (2)


Я склоняюсь к прослушивателю документов или фильтру документов

DocumentListner уведомляет вас, когда в документ были внесены изменения. DocumentFilter позволяет фильтровать текст ДО изменения документа.

Я пробовал что-то вроде:

textPane.insertString(FilterBypass fb, int offs,String str, AttributeSet a) 

Вы НЕ должны обращаться к DocumentFilter напрямую. DocumentFilter получает доступ к документу, когда вы вызываете метод insertString() в документе.

Вместо этого вы должны просто вызвать метод insertString() документа:

textPane.getDocument().insertString(int offs,String str, AttributeSet a) 
person camickr    schedule 10.10.2013
comment
Итак, если я вызову метод insertString() документа, добавит ли это строку в документ, а также обновит JTextPane? Спасибо - person Cameron Roberson; 10.10.2013

если вы делаете из разных потоков, вам нужно использовать invokeLater из SwingUtilities

public void updateTextPane(final String text){
    javax.swing.SwingUtilities.invokeLater(new Runnable() {
        public void run() {
          updateTextPane(text);
        }
    });
}

не забудьте определить текст как окончательный, это не проблема неизменяемости строки, кстати

person RamonBoza    schedule 10.10.2013