Java 如何定义numpad-enter键的击键
我将在swing应用程序中为num pad enter键使用键绑定,但该键很难捕捉。 我看到的所有例子都依赖于类似Java 如何定义numpad-enter键的击键,java,swing,key-bindings,keystrokes,Java,Swing,Key Bindings,Keystrokes,我将在swing应用程序中为num pad enter键使用键绑定,但该键很难捕捉。 我看到的所有例子都依赖于类似 key==KeyEvent.VK\u KP\u LEFT 其中,VK_KP_LEFT是一些预定义的值。其他选项是定义一个keystoke,如下所示: KeyStroke.getKeyStroke(“控制A”) KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_掩码) 但是我还没有找到numpad的“修饰符” 很容易得到的是将军
key==KeyEvent.VK\u KP\u LEFT
其中,VK_KP_LEFT是一些预定义的值。其他选项是定义一个keystoke,如下所示:KeyStroke.getKeyStroke(“控制A”)代码>
KeyStroke.getKeyStroke(KeyEvent.VK_A,InputEvent.CTRL_掩码)代码>
但是我还没有找到numpad的“修饰符”
很容易得到的是将军和努帕德输入之间的区别:
所有numpad键(如果在数字模式下切换或未切换,则为独立键)都被分配了
getKeyLocation()==4
(我通过按键/按键释放方法发现了这一点)
问题是:
如何正确准备numpad enter键的击键,以便在
inputMap.put(击键击键,对象动作映射键)
密钥绑定方法
谢谢,
Tarik如果要查找绑定Enter键,可以使用KeyEvent.VK\u 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\u在数字键盘和主键盘上输入
经过一些测试后,看起来可能无法单独绑定这些密钥。
为两个键生成相同的击键
。JComponent.processKeyBinding的实现不检查KeyEvent
,它所关心的只是击键
,以找到所需的操作
负责分派实际操作的notifyAction不会委派KeyEvent
的所有详细信息(仅键、修饰符和时间)。因此,在动作内部也无法区分,因为ActionEvent
中没有详细信息
如果值得麻烦的话,您可以重写processKeyBinding
,并在需要时添加一些逻辑。您还可以使用KeyboardFocusManageraddKeyEventDispatcher()
阻止其中一个键 这个怎么样
if(keyEvent.getKeyLocation() == KeyEvent.KEY_LOCATION_NUMPAD
&& keyEvent.getKeyCode() == KeyEvent.VK_ENTER)
恕我直言,这不是关于键侦听器的问题,而是关于键绑定的问题,在激活键时不可能确定键事件的位置谢谢您的帮助。似乎很难只绑定到numpad_enter。目前,我不确定是否值得费心去寻找昂贵的解决方案或将设计更改为key listener。最后,代码应该与需求相匹配,并且看起来不应该比需要的更难:-)。干杯,塔里克虽然技术上是正确的,因为它应该响应两个回车键,但我相信OP希望将操作限制在键盘回车上key@MadProgrammer没错,我可能误解了这个问题。可能无法区分这两个键。我想知道OP能否提供更多细节。