将W,S和I,k绑定到乒乓球的左右桨。根据Eclipse,代码进入类p1_upaction扩展AbstractAction,但不运行公共void actionPerform(ActionEvent e)。我不知道该怎么办。键输入称为操作未注册。
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组件将获得焦点。
默认情况下,面板必须具有焦点,键绑定才能使用默认的InutMap。但是,您将键绑定添加到“面板”。由于它没有焦点,绑定不起作用。
解决方案是:
JComponent.WHEN_IN_FOCUSED_WINDOW
输入映射。这意味着即使“面板”组件没有焦点,键绑定也会起作用。有关各种InputMaps的更多信息,请阅读Swing教程中关于如何使用键绑定的部分。
您还可以查看“使用键盘的运动”,了解键绑定的工作示例。
我安装了SpaceVim来测试它和< kbd >;(分号)不起作用。< code >:nmap;表示“未找到映射”。问题是我在源代码中找不到它的未映射位置。在vim中有不同的方法来重新映射/取消映射一个键吗?我应该如何找到这些方法?
我想将两个1d纹理传递到片段着色器中。我正在创建两个sampler1d纹理,将它们绑定到我的着色器程序,但似乎两个采样器使用相同的纹理。当我对texture1使用采样texelFetch时,它使用了我在texture2中定义的错误颜色。 当我希望看到红色屏幕时,下面的着色器程序会返回绿色屏幕。播放参数我看到,纹理1的buf中的任何变化都会改变纹理2的颜色。有什么办法解决吗? 这是我将着色器采样器绑
我有一个扩展JTextField的类,我想让CTRL-Shift-O做一些事情。我一直在听 在e.isControlDown()和e.isShiftDown()的帮助下,这种方法运行良好。但我注意到字段中的文本也在从左边向右边移动。显然,这是JTextField的默认行为。所以我在So上找到了这个线程,它似乎很有帮助: 如何禁用JTextField中的默认textfield快捷方式 尽管Syste
问题内容: 我有一个项目,我试图在回调中使用weakrefs,但我不明白我在做什么错。我创建了简化的测试,以显示我困惑的确切行为。 为什么在此测试中test_a可以正常工作,但是self.MyCallbackB的weakref在类初始化和调用test_b之间消失了?我以为只要实例(a)存在,对self.MyCallbackB的引用就应该存在,但是不存在。 问题答案: 您需要一个WeakMethod
我在做一个非常简单的两个按钮状态。如果我点击abutton,A组件显示,如果点击bButk,那么B组件。我正在映射通过数组的项目,以便每个项目都有自己的按钮状态。假设我点击项目1的按钮B,那么我只想要第一个项目B显示。现在所有这些都会同时被触发。我已经在构造函数中限制了它们,但我仍然无法只获得一次点击触发并显示相关组件。
问题内容: 我正在创建一个小型Java Jpanel游戏,其中应该有一个火箭,它通过箭头上下移动,并通过太空射击。 触发方法应按以下方式工作:按下空格键,东西触发并在屏幕上移动,然后当它碰到某个x时,它就会消失。此外,您只能发射一次,直到另一颗子弹消失为止。 我不知道我在做什么错。首先,在我的代码启动后,您会看到子弹在屏幕上飞舞。 2,子弹没有消失。 第三,即使其他子弹仍然可见,它也允许我再次开火