Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使按键绑定同时可按_Java_Swing - Fatal编程技术网

Java 如何使按键绑定同时可按

Java 如何使按键绑定同时可按,java,swing,Java,Swing,所以我不能同时使用两把钥匙,我希望能做到这一点 我的代码在这里: 如果您尝试同时移动这两个对象,则只有一个会移动,或者没有一个会移动。 我认为这与这里的代码有关: public KeyBidings(){ Action upAction = new AbstractAction(){ public void actionPerformed(ActionEvent e) { y2 -=10; }

所以我不能同时使用两把钥匙,我希望能做到这一点

我的代码在这里:

如果您尝试同时移动这两个对象,则只有一个会移动,或者没有一个会移动。 我认为这与这里的代码有关:

public KeyBidings(){
        Action upAction = new AbstractAction(){
            public void actionPerformed(ActionEvent e) {
                y2 -=10;
            }
        };
    Action downAction = new AbstractAction(){
        public void actionPerformed(ActionEvent e) {
        y2 +=10;
        }
        
    };
        Action wAction = new AbstractAction(){
            public void actionPerformed(ActionEvent e) {
                y -=10;
            }
        };
    Action sAction = new AbstractAction(){
        public void actionPerformed(ActionEvent e) {
        y +=10;
        }
        
    };
    drawPanel.repaint();
            InputMap inputMap = drawPanel.getInputMap(JPanel.WHEN_IN_FOCUSED_WINDOW);
            ActionMap actionMap = drawPanel.getActionMap();
 
        inputMap.put(KeyStroke.getKeyStroke("DOWN"), "downAction");
        actionMap.put("downAction", downAction);
        inputMap.put(KeyStroke.getKeyStroke("UP"), "upAction");
        actionMap.put("upAction", upAction);
 
        inputMap.put(KeyStroke.getKeyStroke("S"), "sAction");
        actionMap.put("sAction", sAction);
        inputMap.put(KeyStroke.getKeyStroke("W"), "wAction");
        actionMap.put("wAction", wAction);

触发键绑定时,
DrawPanel
更新的原因是什么?@MadProgrammer查看pastebin Paste的第118行,在
paint
方法中不要调用
repaint
——这将导致无休止的问题。改用Swing
定时器。这是一个比较普遍的问题。不要更新键的
操作
中值的状态,而是使用状态值指示是否按下,并使用
计时器
根据此状态更新模型-因为一次只为一个键生成事件。因此,您需要跟踪所有按下的键(在地图或其他东西中),然后在释放键时移除这些键。然后,您的运动将基于地图中的所有关键点。退房
KeyboardAnimation.java
代码包含一个完整的工作示例,演示了一种方法。触发键绑定时,
DrawPanel
更新的原因是什么?@MadProgrammer查看pastebin pasteDO的第118行,在
paint
方法中不调用
repaint
,这将导致你的问题没完没了。改用Swing
定时器。这是一个比较普遍的问题。不要更新键的
操作
中值的状态,而是使用状态值指示是否按下,并使用
计时器
根据此状态更新模型-因为一次只为一个键生成事件。因此,您需要跟踪所有按下的键(在地图或其他东西中),然后在释放键时移除这些键。然后,您的运动将基于地图中的所有关键点。退房
KeyboardAnimation.java
代码包含一个完整的工作示例,演示了一种方法。