Текст Изменено событие в 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
? Если это возможно, то как?
Ответы
Ответ 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?