首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >JFrame的KeyListener无响应

JFrame的KeyListener无响应
EN

Stack Overflow用户
提问于 2008-11-13 10:17:11
回答 10查看 124.6K关注 0票数 82

我正在尝试为我的JFrame实现一个KeyListener。在构造函数中,我使用了以下代码:

代码语言:javascript
运行
复制
System.out.println("test");
addKeyListener(new KeyListener() {
    public void keyPressed(KeyEvent e) { System.out.println( "tester"); }

    public void keyReleased(KeyEvent e) { System.out.println("2test2"); }

    public void keyTyped(KeyEvent e) { System.out.println("3test3"); }
});

当我运行它时,test消息出现在我的控制台上。但是,当我按下一个键时,我没有收到任何其他消息,就好像KeyListener不在那里一样。

我在想这可能是因为焦点不在JFrame

所以他们KeyListener不会收到任何事件。但是,我很确定是这样的。

我是不是漏掉了什么?

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2008-11-13 13:01:29

您必须将keyListener添加到所需的每个组件中。只有具有焦点的组件才会发送这些事件。例如,如果您的JFrame中只有一个TextBox,则该TextBox具有焦点。因此您还必须向该组件添加一个KeyListener。

过程是相同的:

代码语言:javascript
运行
复制
myComponent.addKeyListener(new KeyListener ...);

注意:有些组件不是可聚焦的,比如JLabel。

要将它们设置为可聚焦,您需要:

代码语言:javascript
运行
复制
myComponent.setFocusable(true);
票数 52
EN

Stack Overflow用户

发布于 2013-02-23 08:29:08

InputMaps和ActionMaps旨在捕获组件、组件及其所有子组件或整个窗口的关键事件。这是通过JComponent.getInputMap()中的参数控制的。有关文档,请参阅How to Use Key Bindings

这种设计的美妙之处在于,用户可以选择要监视的重要键击,并根据这些键击触发不同的操作。

当在窗口中的任意位置按下退出键时,此代码将对JFrame调用dispose()。JFrame不是从JComponent派生的,因此您必须使用JFrame中的另一个组件来创建键绑定。内容窗格可能就是这样一个组件。

代码语言:javascript
运行
复制
InputMap inputMap; 
ActionMap actionMap;
AbstractAction action;
JComponent component;

inputMap  = component.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);
actionMap = component.getActionMap();

action    = new AbstractAction()
{
   @Override
   public void actionPerformed(ActionEvent e)
   {
      dispose();
   }
};

inputMap.put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "dispose");
actionMap.put("dispose", action);
票数 16
EN

Stack Overflow用户

发布于 2009-04-27 15:30:44

我也遇到了同样的问题,直到我读到真正的问题是关于焦点,你的JFrame已经添加了侦听器,但巡视框架从来不是焦点,因为你的JFrame中有很多组件也是可聚焦的,所以试一下:

代码语言:javascript
运行
复制
JFrame.setFocusable(true);

祝好运

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/286727

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档