2011-02-02 54 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"); 

为我工作。