Enterバインディングキーを探している場合は、次のように使用できますKeyEvent.VK_ENTER
。
getInputMap().put(KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "someAction");
getActionMap().put("someAction", someAction);
以下に短い例を示します。
import java.awt.event.*;
import javax.swing.*;
public class Test {
public static void main(String[] args) throws Exception {
final JFrame frame = new JFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
panel.add(new JLabel("Hit Enter"));
Action someAction = new AbstractAction() {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(frame, "Got it");
}
};
panel.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(
KeyStroke.getKeyStroke(KeyEvent.VK_ENTER, 0), "someAction");
panel.getActionMap().put("someAction", someAction);
frame.add(panel);
frame.pack();
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
編集:テンキーとメインキーボードの VK_ENTER
いくつかのテストの後、これらのキーを個別にバインドすることはできないようです。KeyStroke
両方のキーに対して同じものが生成されます。の実装はJComponent.processKeyBinding
を検査しません。目的のアクションを見つけることだけがKeyEvent
重要です。KeyStroke
SwingUtilities.notifyAction
実際のアクションのディスパッチを担当するものは、すべての詳細を委任するわけではありませんKeyEvent
(キー、修飾子、および when のみ)。に詳細がないため、アクション内でどちらかを区別する方法はありませんActionEvent
。
手間をかける価値がある場合はprocessKeyBinding
、必要に応じてロジックをオーバーライドして追加できます。KeyboardFocusManageraddKeyEventDispatcher()
キーの 1 つをブロックするためにも使用できます。