我想将 KeyEventListener 添加到 JButton ,它使用以下代码段响应Enter键:
private void jButton3KeyPressed(java.awt.event.KeyEvent evt) {
if (evt.getKeyCode() == 10) {
eventRegister();
}
}
我按空格键而不是输入,if条件设置为true并调用eventRegister
。为什么?我怎么能阻止这种方式?
答案 0 :(得分:6)
不要对KeyListener
或MouseListener
使用JButton
或JButtons JComponent
,这些事件是在API或ButtonsModel
中实现的,每个可以测试,consume()
KeyEvent
从SPACE
删除KeyBindings
,但不建议,我不会混淆用户,确实取决于
答案 1 :(得分:1)
您应该使用KeyBinding而不是KeyListeners。
但即使你不是,你的当前代码也应该像这个例子一样工作。
JFrame frame = new JFrame();
frame.setLayout(new FlowLayout());
JButton button=new JButton("do something");
button.addKeyListener(new KeyAdapter() {
@Override
public void keyPressed(KeyEvent evt) {
if (evt.getKeyCode() == 10) {
System.out.println("it is ten");
}
}
});
frame.getContentPane().add(button);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300, 300);
frame.setVisible(true);
如果您不会发布可用于重现问题的完整(但简短)示例,那么几乎不可能说出您做错了什么。
(如果您添加有关代码的更多信息,我将尝试编辑此答案)。
答案 2 :(得分:0)
尝试使用
if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
....
“按下按键”和“按键释放”事件是较低级别的,取决于平台和键盘布局。
由于java是跨平台的,因此不要对键盘代码使用硬编码值。