Java: 为JFrame及其组件添加KeyListener

Java: Add KeyListener to JFrame and its components

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

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

但是,当我将焦点放在按钮或 JTextField 上时(例如当我单击它时),KeyListener 不会对我的按钮按下做出反应。

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

Do you know how to fix this?

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

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

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

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


您可以在此处找到我的一些使用键绑定的示例程序,通常与 Swing 动画结合使用:

  • Java Animate JLabel
  • MouseEntered and KeyPressed at Same Time Java Swing
  • Override VK_Tab Focus action
  • How to make an image move while listening to a keypress in Java.
  • Java Key Event won't execute once I press a button
  • Did I structure this key listener properly?