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

时间:2016-10-14 22:12:40

标签: java multithreading jframe key-bindings

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

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

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,但我不知道如何使用键绑定。提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

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

因此,在上面的代码中,您可以将Key Bindings添加到主JPanel或JFrame的contentPane,这是一个JPanel但必须首先进行转换。

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