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

Java swing: How do i detect if the key pressed will display output in my JTextArea?

我正在使用文本编辑器,我希望能够检测两种不同类型的关键事件之间的区别:导致我的 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;
    }
}

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

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

阅读 How to Write a DocumentListener 上的 Swing 教程部分了解更多信息。

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

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

Swing 中还通过使用键绑定实现了快捷方式。