如何在 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 方法中。
我正在尝试使用键绑定来控制游戏(上、下、左、右箭头)。我的计划是在多线程中使用键绑定,调用某种更新方法。
到目前为止我的图形代码 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 方法中。