gpt4 book ai didi

java - 我不确定为什么我的按键绑定(bind)不起作用。 [Java 按键绑定(bind)]

转载 作者:行者123 更新时间:2023-12-01 18:34:38 24 4
gpt4 key购买 nike

将 W、S 和 I、k 绑定(bind)到乒乓球的左右桨上。根据 Eclipse,代码进入类 p1_upaction 扩展 AbstractAction,但不运行 public void actionPerformed(ActionEvent e)。我不知道该怎么做。KeyInput 被称为该操作未注册。

public void frame() {
frame = new JFrame("Pong");
frame.setSize(width,height);
frame.setLayout(new BorderLayout());
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
Container c = frame.getContentPane();

frameWidth = frame.getWidth();
frameHeight = frame.getHeight();

menuGraphics = new menuGraphic();
menuGraphics.addMouseMotionListener(this);
menuGraphics.addMouseListener(this);

gameGraphics = new gameGraphic(puck,p1,p2);


panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.setSize(width,height);
panel.add(menuGraphics,BorderLayout.CENTER);
keyInput();

menuState = true;
c.add(panel);
frame.setVisible(true);

puck = new Puck(frameWidth/2,frameHeight/2,20,20);
p1 = new Paddle(frameWidth/8,frameHeight/2,20,100);
p2 = new Paddle(frameWidth/8*7-20,frameHeight/2,20,100);
puck.setPaddle(p1, p2);
p1.setPuck(puck);
p2.setPuck(puck);
}

public void keyInput() {
p1_upAction = new p1_upaction();
p1_downAction = new p1_downaction();
p2_upAction = new p2_upaction();
p2_downAction = new p2_downaction();
panel.getInputMap().put( KeyStroke.getKeyStroke( "W" ),"p1_moveUp" );
panel.getActionMap().put("p1_moveUp", p1_upAction);
panel.getInputMap().put( KeyStroke.getKeyStroke( "S" ),"p1_moveDown" );
panel.getActionMap().put("p1_moveDown", p1_downAction);
panel.getInputMap().put( KeyStroke.getKeyStroke( "I" ),"p2_moveUp" );
panel.getActionMap().put("p1_moveUp", p2_upAction);
panel.getInputMap().put( KeyStroke.getKeyStroke( "K" ),"p2_moveDown" );
panel.getActionMap().put("p1_moveDown", p2_downAction);
}
class p1_upaction extends AbstractAction {
public void actionPerformed(ActionEvent e) {
System.out.println("up");
}

}

最佳答案

panel = new JPanel();
panel.setLayout(new BorderLayout());
panel.setSize(width,height);
panel.add(menuGraphics,BorderLayout.CENTER);

您创建一个带有 BorderLayout 的面板,然后将“menuGraphics”组件添加到该面板。这意味着 menuGraphics 组件将获得焦点。

默认情况下,面板必须具有键绑定(bind)焦点才能与默认的 InputMap 一起使用。但是,您将按键绑定(bind)添加到“面板”。由于它没有焦点,因此绑定(bind)不起作用。

解决方案是:

  1. 将按键绑定(bind)添加到“menuGraphics”组件,或者
  2. 将绑定(bind)添加到 InputMap 时,请使用 JComponent.WHEN_IN_FOCUSED_WINDOW InputMap。这意味着即使“面板”组件没有焦点,键绑定(bind)也将起作用。

阅读 Swing 教程中关于 How to Use Key Bindings 的部分有关各种输入映射的更多信息。

您还可以查看Motion Using the Keyboard有关键绑定(bind)的工作示例。

关于java - 我不确定为什么我的按键绑定(bind)不起作用。 [Java 按键绑定(bind)],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60083808/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com