我一直在尝试为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
来实现吗?如果可以,那怎么样?
答案 0 :(得分:43)
我会通过getDocument()
(实际上是一个PlainDocument)获取JTextArea的文档并使用DocumentListener来监听更改。这样,您可以从击键和复制/粘贴/剪切事件中捕获更改。
答案 1 :(得分:35)
不是JTextArea,但包含的文档会收到更新,因此您需要:
jTextArea.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void removeUpdate(DocumentEvent e) {
}
@Override
public void insertUpdate(DocumentEvent e) {
}
@Override
public void changedUpdate(DocumentEvent arg0) {
}
});
答案 2 :(得分:15)
您正在使用==
比较字符串if (currentText == textString)
这永远不会成真。这将比较字符串是否是相同的String对象。你应该使用equals。
if (currentText.equals( textString) )
您可能还想查看DocumentListeners。 另见How do I compare strings in Java?