如何在 java 中使用 JFrame 的键绑定

How to use key binding with JFrame in java

我正在尝试使用键绑定来控制游戏(上、下、左、右箭头)。我的计划是在多线程中使用键绑定,调用某种更新方法。

到目前为止我的图形代码 window:

import javax.swing.JFrame;
import javax.swing.JPanel;
import java.awt.Container;

public class Main extends JPanel{
    public Main(){
        JFrame window = new JFrame("New window");
        window.setSize(300, 300);
        window.setVisible(true);
        Container c = window.getContentPane();
        c.add(new Main());
    }
    public static void main(String[] args){
        //some code
        //multi threading code
    }
}

我已经阅读了键绑定的文档,但我不确定如何将它用于 JFrame。我想我应该将它添加到 c,但我不确定如何使用键绑定。预先感谢您的帮助。

您需要将 KeyBindings 与从 JComponent 扩展的组件一起使用,例如 JPanel,因为该对象必须具有 getActionMap()getInputMap() 才能进行绑定。 JFrame 不从 JComponent 扩展,因此您不能直接绑定到 JFrame,但可以绑定到它满足此规则的任何组件。

因此,在您上面的代码中,您可以将键绑定添加到 Main JPanel 或 JFrame 的 contentPane,这是一个 JPanel,但必须先将其转换为一个。

你上面的代码虽然有一个问题,因为 Main 的构造函数中的 c.add(new Main()); 会导致无限递归,从而导致 WhosebugException。添加 this 或将 JFrame 创建代码放在 main 方法中。