我正在使用文本编辑器,我希望能够检测两种不同类型的键事件之间的区别:导致我的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;
}
}
答案 0 :(得分:4)
不要使用KeyListener。有更好的API来处理这些情况。
如果您想知道文本组件中的数据是否已更改,那么您应该使用DocumentListener
。每当添加或删除文本时,它都会生成一个事件。
阅读How to Write a DocumentListener上的Swing教程中的部分以获取更多信息。
如果您想知道何时按下箭头键以调用某种Action,那么您应该使用Key Bindings
。这就是所有Swing组件的工作方式。 KeyStroke
绑定到Action
。
有关详细信息,请参阅Key Bindings以及每个组件的默认键绑定的完整列表。
使用键绑定也可以在Swing中实现快捷方式。