如何解决如何仅在用户键入某些组件时禁用自定义快捷键,并在焦点不在Java中的可编辑组件上时再次启用它?
我正在使用以下代码为JFrame设置快捷键。
KeyboardFocusManager keyManager;
keyManager=KeyboardFocusManager.getCurrentKeyboardFocusManager();
keyManager.addKeyEventDispatcher(new KeyEventDispatcher() {
@Override
public boolean dispatchKeyEvent(KeyEvent e){
if(e.getID()==KeyEvent.KEY_PRESSED && e.getKeyCode()==KeyEvent.VK_C && e.isShiftDown()){
//shift+c
openCalculator();
}
return false;
}});
工作正常!但是问题是,当用户在某些文本字段或表格单元格等中写东西,并且想要写任何大写字母时,假设 C 并按Shift + C进行大写,则我的代码将其接受为快捷键,而不是写大写字母来触发事件。
我想做的是在整个程序中禁用所有可编辑单元格,字段等的事件,并在可编辑组件失去焦点时再次启用该事件。 我希望快捷键仅在用户未编辑任何字段或在程序中编写内容时才起作用。
解决方法
我通过检查KeyDispatchEvent来解决此问题,方法是确定不希望事件集中发生在其中的组件的特定实例。
boolean check = true;
try
{
Component comp = FocusManager.getCurrentManager().getFocusOwner();
if(comp instanceof JTextField || comp instanceof JTextArea || comp instanceof JComboBox || comp instanceof JTable){
check = false;
}
} catch (Exception ee) { ee.printStackTrace();
check = true;
}
}
if (check)
{
//do something
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。