如果您正在寻找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
(只有键、修饰符和何时)。所以内部行动没有办法区分,因为没有细节ActionEvent
。
如果值得麻烦,您可以processKeyBinding
根据需要覆盖并添加一些逻辑。您还可以KeyboardFocusManageraddKeyEventDispatcher()
用于阻止其中一个键。