2012-06-05 3 views
0

У меня есть JTextArea, и я хотел бы слушать, когда пользователь вставляет текст в JtextArea. В частности, я хотел бы сделать следующее:JTextArea Document Listener update text

Получите текст, который они вставили, удалили пробелы и заменили текст JTextArea на отредактированный текст без пробелов (а не на оригинальный текст, который вставил пользователь).

Как я могу сделать это с помощью DocumentListener и избежать java.lang.UnsupportedOperationException: Not supported yet., которая приходит в результате следующего кода:

public void insertUpdate(DocumentEvent de) { 

     final String replace = jTextArea1.getText().replaceAll("\\s",""); 

     SwingUtilities.invokeLater(new Runnable() { 
      public void run() { 
      jTextArea1.setText(replace); 
      } 
     }); 

    } 
+0

Что такое трассировка стека из этого исключения? Кажется, это должно сработать. Если есть какой-то запрет на повторную настройку текста из обработчика события, в этом случае вы можете попробовать вызов 'SwingUtilities.invokeLater()'. –

+0

Я попробовал SwingUtilities.invokeLater (см. Обновленный вопрос). Ошибка по-прежнему бросается. – CodeGuy

+0

Можете ли вы опубликовать трассировку стека? Непонятно (мне), что вызывает ошибку. –

ответ

1

Я не какой-либо проблемы с методом insertUpdate(DocumentEvent documentEvent), конечно JTextArea может принимать только символы вход, если вы будете иметь использование вопрос JEditorPane, там вы можете импортировать другой Java AWT и свинг объекты слишком

пример кода

private DocumentListener docListener = new DocumentListener() { 

    @Override 
    public void changedUpdate(DocumentEvent documentEvent) { 
     printIt(documentEvent); 
    } 

    @Override 
    public void insertUpdate(DocumentEvent documentEvent) { 
     printIt(documentEvent); 
    } 

    @Override 
    public void removeUpdate(DocumentEvent documentEvent) { 
     printIt(documentEvent); 
    } 

    private void printIt(DocumentEvent documentEvent) { 
     DocumentEvent.EventType type = documentEvent.getType(); 
     //your code 
    } 
}; 

для замены вставленных символов вы должны добавить DocumentFilter

+0

Однако, если вы попытаетесь сказать textArea.setText (textArea.getText(). ReplaceAll ("\\ s", "")), вы получите область, которую я поставил в вопросе – CodeGuy

+0

см. Мое редактирование (я буду искать onle of мои примеры здесь) – mKorbel

+0

, поэтому мне просто нужно вызвать другую функцию для этого, вместо того, чтобы поместить setText() в функцию changeUpdate? – CodeGuy

0

Если вы хотите удалить белый символ, используйте \S or \s в regexp. Если вы хотите удалить только пространство, вы можете сделать это таким же образом. Подробнее о regexp: http://docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html

+0

Я уже удаляю пробелы. Пожалуйста, прочитайте вопрос, потому что это не проблема. – CodeGuy

Смежные вопросы