4

我想使用以下代码段向JButton添加一个响应 Enter 键的KeyEventListener :

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

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

4

3 回答 3

6
  • 不要使用KeyListeneror MouseListenerfor JButtonor JButtons JComponent,这些事件是在 API 中实现的, or ButtonsModel,每个都可以测试,with to consume()ofKeyEvent

  • JButton在 KeyBindings中实现了ENTER 和 SPACE 键作为加速器

  • SPACE从中删除KeyBindings,但不建议这样做,我会混淆用户,当然取决于

于 2013-07-06T11:29:34.587 回答
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);

如果您不发布可用于重现您的问题的完整(但简短)示例,那么几乎不可能说出您做错了什么。

(如果您添加有关代码的更多信息,我将尝试编辑此答案)。

于 2013-07-06T20:56:18.113 回答
0

尝试使用

if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
....

“按键”和“按键释放”事件是较低级别的,取决于平台和键盘布局。

由于 java 是跨平台的,因此不要对键盘代码使用硬编码值。

于 2013-07-06T11:10:31.890 回答