2011-02-02 53 views
3

我試圖使用InputMap/ActionMap攔截刪除鍵。我將它與Enter一起工作,但它似乎沒有迴應刪除(這是在Mac OSX上,所以我想知道這是否是問題的一部分)。在Java Swing中刪除的KeyStroke

我在做什麼錯?

private void setupKeyBindings(final JList jlist) { 
     String delAction = "deleteItems"; 
     KeyStroke delKey = KeyStroke.getKeyStroke("DELETE"); 
     jlist.getInputMap().put(delKey, delAction); 
     jlist.getActionMap().put(delAction, new AbstractAction() 
     { 
      @Override public void actionPerformed(ActionEvent e) { 
       System.out.println("delete pressed"); 
       doDelete(jlist); 
      } 
     });  

     String enterAction = "useItems"; 
     KeyStroke enterKey = KeyStroke.getKeyStroke("ENTER"); 
     jlist.getInputMap().put(enterKey, enterAction); 
     jlist.getActionMap().put(enterAction, new AbstractAction() 
     { 
      @Override public void actionPerformed(ActionEvent e) { 
       System.out.println("enter pressed"); 
      } 
     }); 
    } 
+0

你試過`KeyStroke.getKeyStrokeForEvent(KeyEvent.VK_DELETE) `?這是在黑暗中拍攝的,但是`KeyStroke.getKeyStroke(「BACKSPACE」)``怎麼樣? – earldouglas 2011-02-02 23:45:05

回答

7

嗯。我的Mac上的「刪除」鍵似乎映射到我認爲是退格鍵的KeyListener鍵碼8。 (這裏只有一個刪除鍵,而不是一個單獨的退格鍵,我的Mac鍵盤上,同時具有與Windows的PC鍵盤)

以下似乎爲Mac作品映射到命令刪除:

KeyStroke delKey = KeyStroke.getKeyStroke(
    KeyEvent.VK_BACK_SPACE, InputEvent.META_MASK); 
+0

正確; Mac對任何其他鍵盤上的Backspace都使用Delete這個詞。 – 2011-02-03 02:07:43

+4

要執行真正的「刪除」,用戶需要按住'fn'然後按'刪除'。就像一個供參考。 – Lee 2011-11-16 05:49:10

3
KeyStroke.getKeyStroke("BACK_SPACE"); 

爲我工作。