簡體   English   中英

如何僅在用戶輸入某個組件時禁用自定義快捷鍵,並在焦點不在 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;
}});

它工作正常! 但問題是,當用戶在某些文本字段或表格單元格等中寫東西並想寫任何大寫字母時,假設C ompose 並按 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
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM