Java swing:我如何检测按下的键是否会在我的JTextArea中显示输出?

时间:2016-04-21 16:40:04

标签: java swing jtextarea keyevent

我正在使用文本编辑器,我希望能够检测两种不同类型的键事件之间的区别:导致我的JTextArea中文本发生可见更改的那些(即字母数字)字符,输入键,符号),以及不会导致可见变化的那些(方向键,控制键,快捷键)。我知道我可以用一个非常详细的switch语句来做到这一点,但是有一个不那么详细的方法来执行以下操作吗?

private void checkKey (java.awt.event.KeyEvent evt) {
    if (saved && /*some way to check if the text in the box has changed */) {
        editorTitle.setText(currentedit + " (Edited)");
        saved = false;
    }
}

1 个答案:

答案 0 :(得分:4)

不要使用KeyListener。有更好的API来处理这些情况。

如果您想知道文本组件中的数据是否已更改,那么您应该使用DocumentListener。每当添加或删除文本时,它都会生成一个事件。

阅读How to Write a DocumentListener上的Swing教程中的部分以获取更多信息。

如果您想知道何时按下箭头键以调用某种Action,那么您应该使用Key Bindings。这就是所有Swing组件的工作方式。 KeyStroke绑定到Action

有关详细信息,请参阅Key Bindings以及每个组件的默认键绑定的完整列表。

使用键绑定也可以在Swing中实现快捷方式。