Java:将KeyListener添加到JFrame及其组件

时间:2015-02-17 16:24:45

标签: java swing jframe actionlistener keylistener

我尝试向KeyListener添加JFrame。这很好用。

JFrame frame = new JFrame();
[...]
frame.addKeyListener(new KeyListener() { [...] });

然而,当我专注于某个按钮或JTextField时(就像我点击它时),KeyListener将不会对我的按钮推动作出反应。

你知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

  

你知道如何解决这个问题吗?

是的,使用密钥绑定而不是KeyListener。即使绑定组件没有焦点,绑定也可以设置为有效,这是它们的关键优势之一(没有双关语意)。可以在此处找到该教程:Key Bindings Tutorial

请注意,当您从绑定组件中获取InputMap时,请确保使用正确的条件,即

InputMap inputMap = myComponent.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);

每个组件有三个输入映射,当组件保存在当前活动的顶级窗口(例如JFrame)时,上面的组件将处于活动状态。这意味着即使组件本身没有焦点,绑定也会起作用。


你可以在这里找到一些使用Key Bindings的示例程序,通常与Swing动画结合使用: