2011-02-02 24 views
3

私はInputMap/ActionMapを使って削除キーを傍受しようとしています。私はそれがEnterで動作するようになるが、それは削除で応答していないようだ(これはMac OSX上にあるので、それが問題の一部であるのだろうか)。Java Swingのキーストローク

私は間違っていますか?

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

答えて

7

Hmm。私のMacの「削除」キーは、バックスペースであると思われるKeyListenerのキーコード8にマッピングされているようです。以下は、にマップするMac用の作品に表示されます

(私のMacのキーボードでは、単に削除キーではなく、別のバックスペースキー、両方を持っている対のWindows PCのキーボードあります)コマンドの削除:

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

正しい。 Macでは、他のキーボードのものをBackspaceとしてDeleteという用語を使用します。 –

+4

真の「削除」を実行するには、ユーザーは「fn」を押したまま「削除」を押す必要があります。 FYIと同じように。 – Lee

3
KeyStroke.getKeyStroke("BACK_SPACE"); 

私のために働きました。

1

これは直接あなたの質問に答えていませんが、これは私に答え:

deleteAction.putValue(
    javax.swing.Action.ACCELERATOR_KEY, 
    KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0) 
); 

あなたがここに他のKeyEvent整数定数を見つけることができます:https://docs.oracle.com/javase/7/docs/api/java/awt/event/KeyEvent.html

+1

ありがとうございますが、削除キーがJavaの "バックスペース"の概念に対応しているため、Macでは(少なくとも元の質問の書き込み時ではなく)動作しません。 –

+0

@JasonSはい、私はそれを認識しています。しかし、ここで受け入れられた答えは、私のWindowsマシンで私にとってはうまくいかなかったので、この質問に遭遇するWindowsユーザーのためにこの回答をここに掲載しています。 – shieldgenerator7

+0

この質問には 'osx'タグがあります。 –