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

问题描述 投票:1回答:1

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

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

但是,当我把焦点放在一个按钮或JTextField上时(比如当我点击它时),KeyListener不会对我的按钮推动作出反应。

你知道怎么解决这个问题吗?

java swing jframe actionlistener keylistener
1个回答
3
投票

你知道怎么解决这个问题吗?

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

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

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

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


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

© www.soinside.com 2019 - 2024. All rights reserved.