关键事件

时间:2013-07-06 11:08:26

标签: java swing jbutton keylistener

我想将 KeyEventListener 添加到 JButton ,它使用以下代码段响应Enter键:

   private void jButton3KeyPressed(java.awt.event.KeyEvent evt) {
        if (evt.getKeyCode() == 10) {
           eventRegister();
        }
   }                                   

我按空格键而不是输入,if条件设置为true并调用eventRegister。为什么?我怎么能阻止这种方式?

3 个答案:

答案 0 :(得分:6)

  • 不要对KeyListenerMouseListener使用JButtonJButtons JComponent,这些事件是在API或ButtonsModel中实现的,每个可以测试,consume() KeyEvent

  • JButton已实施ENTER and SPACE key as accelator in KeyBindings

  • 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是跨平台的,因此不要对键盘代码使用硬编码值。