如何仅在用户输入某个组件时禁用自定义快捷键,并在焦点不在 java 中的可编辑组件上时再次启用它?

How to disable custom Shortkeys only when user is typing in some component and enable it again when focus is not on editable component in 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;
}});

而且效果很好!但问题是,当用户在某些文本字段或 table 单元格等中写东西并想写任何大写字母时,让我们说 Compose 并按 Shift+C 以大写然后我的代码接受这个作为快捷键,而不是写事件被触发的大写字母。

我想做的是在整个程序中为所有 editable 单元格、字段等禁用此事件,并在 editable 组件失去焦点时再次启用它。 我希望我的快捷键仅在用户未编辑任何字段或未在程序中写入内容时才起作用。

我通过检查 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
}