我正在尝试使用键绑定来控制游戏(向上,向下,向左,向右箭头)。我的计划是使用多线程的键绑定,调用某种更新方法。
到目前为止我的图形窗口代码:
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,但我不知道如何使用键绑定。提前感谢您的帮助。
答案 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方法中。