Подтвердить что ты не робот

Текст Изменено событие в JTextArea? Как?

Я пытаюсь сделать текстовый механизм обработки событий для моего JTextArea. Для моих целей событие должно запускаться при каждом изменении текста JTextArea. Я попытался использовать интерфейс KeyListener, и вот для этого мой код.

txtArea.addKeyListener(new KeyListener() {

    @Override
    public void keyTyped(KeyEvent arg0) {

    }

    @Override
    public void keyReleased(KeyEvent arg0) {
        // TODO Auto-generated method stub

    }

    @Override
    public void keyPressed(KeyEvent arg0) {
        currentText = text.getText();
        if (currentText == textString)
            JOptionPane.showMessageDialog(null, "Correct");

    }
});

Ничего не произошло, когда текст textarea соответствовал жесткокодированному тексту. Как можно изменить событие события для этого.
Можно ли достичь этой цели с помощью PropertyChangedListener? Если это возможно, то как?

4b9b3361

Ответ 1

Я получил бы документ JTextArea через getDocument() (фактически PlainDocument) и использовал DocumentListener для прослушивания изменений. Таким образом, вы могли бы фиксировать изменения от нажатия клавиш, а также из событий копирования/вставки/вырезания.

Ответ 2

Не JTextArea, но содержащийся документ получает обновления, поэтому вам нужно:

jTextArea.getDocument().addDocumentListener(new DocumentListener() {

        @Override
        public void removeUpdate(DocumentEvent e) {

        }

        @Override
        public void insertUpdate(DocumentEvent e) {

        }

        @Override
        public void changedUpdate(DocumentEvent arg0) {

        }
    });

Ответ 3

Вы сравниваете строки с ==

if (currentText == textString)

Это никогда не будет правдой. Это сравнивает, если строки являются одним и тем же объектом String. Вы должны использовать равные.

if (currentText.equals( textString) )

Вы также можете проверить DocumentListeners. См. Также Как сравнить строки в Java?