【问题标题】:Java is not picking up keypresses?Java没有拿起按键?
【发布时间】:2013-03-28 19:28:11
【问题描述】:

我有一个程序,它生成一个 JFrame,然后在它上面生成一个 JPanel。对于该程序,我尝试实现 KeyListener,然后添加方法(对于两个组件),但该程序没有选择我的任何击键。我做错了什么?

编辑

这是我的代码。它是创建 JFrame 的类的一部分。它仍然没有按 ESC 键。

@Override
public void keyTyped(KeyEvent e) {

}

@Override
public void keyPressed(KeyEvent e) {
    int keyCode = e.getKeyCode();

    if(keyCode == KeyEvent.VK_ESCAPE){
        System.out.println("Hi");

    }else{
        System.out.println("Hello");

    }

}

@Override
public void keyReleased(KeyEvent e) {

}

【问题讨论】:

  • 没有代码是不可能的
  • 带有keylistener的组件需要有焦点...
  • 您确定没有调用该事件吗?
  • 您是否要捕获与 TAB 键对应的事件?
  • @MarkusKreth 你将如何设置 JFrame 的焦点?

标签: java swing overriding public keylistener


【解决方案1】:

如果没有你的代码,我只能告诉你,通常当人们问这个问题时,他们不知道接口 KeyListener 包含三个方法,正如 their answer here 中的 Agusti-N 所述:

void keyTyped(KeyEvent)
void keyPressed(KeyEvent)
void keyReleased(KeyEvent)

如果您使用keyTyped 并使用event.getKeyCode() 检查输入的字符,这将不起作用。对于keyTyped,您应该使用getKeyChar(),对于keyPressedkeyReleased,应该使用getKeyCode()。否则你会得到null。 只有在没有其他选择的情况下才应该使用它,在大多数情况下,您想使用Key Bindings

【讨论】:

  • 啊,从来不知道codecharacter在这种情况下的区别。
  • 另外,您很可能忘记向 JPanel 注册 KeyListener。使用 panel.addKeyListener(listener)。
  • @Mr D 你有没有提到KeyEvent Javadoc 的部分,上面写着“对于 KEY_TYPED 事件,keyCode 是 VK_UNDEFINED。”
  • 是的,实际上我不久前在处理一些 javafx 项目时发现并阅读了 NetBeans 提示
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-09-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多