Java 按键不适用于箭头键

Java 按键不适用于箭头键,java,Java,我最近开始研究我一直在创作的一款原始游戏的用户界面。除了一个例外,一切进展顺利。我目前正在使用Keystroke类作为获取输入而不是关键事件的一种方式 public void bindControls() { inputMap = frame.getMainPane().getInputMap(IFW); actionMap = frame.getMainPane().getActionMap(); inputMap.put(KeyStroke.getKeyStroke(

我最近开始研究我一直在创作的一款原始游戏的用户界面。除了一个例外,一切进展顺利。我目前正在使用Keystroke类作为获取输入而不是关键事件的一种方式

public void bindControls()
{
    inputMap = frame.getMainPane().getInputMap(IFW);
    actionMap = frame.getMainPane().getActionMap();
    inputMap.put(KeyStroke.getKeyStroke("UP"), Controls.UP_ACTION);
    inputMap.put(KeyStroke.getKeyStroke("DOWN"), Controls.DOWN_ACTION);
    inputMap.put(KeyStroke.getKeyStroke("LEFT"), Controls.LEFT_ACTION);
    inputMap.put(KeyStroke.getKeyStroke("RIGHT"), Controls.RIGHT_ACTION);
    inputMap.put(KeyStroke.getKeyStroke("W"), Controls.UP_ACTION);
    inputMap.put(KeyStroke.getKeyStroke("S"), Controls.DOWN_ACTION);
    inputMap.put(KeyStroke.getKeyStroke("A"), Controls.LEFT_ACTION);
    inputMap.put(KeyStroke.getKeyStroke("D"), Controls.RIGHT_ACTION);
    actionMap.put(Controls.UP_ACTION, new MoveAction(Controls.UP_ACTION));
    actionMap.put(Controls.DOWN_ACTION, new MoveAction(Controls.DOWN_ACTION));
    actionMap.put(Controls.LEFT_ACTION, new MoveAction(Controls.LEFT_ACTION));
    actionMap.put(Controls.RIGHT_ACTION, new MoveAction(Controls.RIGHT_ACTION));
}
这是我用来绑定播放器控件的方法。 我的问题是“W”、“A”、“S”和“D”都可以正常工作,但是“向上”、“向下”、“向左”和“向右”。按下按钮时不执行任何操作。我找遍了所有我能找到的地方,包括java文档。但是我读过的所有东西都声称上面的代码是正确的

如果任何人有这个问题或有一个修复我可以使用您的帮助。 谢谢

附言。 java是一个枚举

package controls;

public enum Controls 
{
    UP_ACTION, DOWN_ACTION, LEFT_ACTION, RIGHT_ACTION
}
编辑:我的MoveAction类

package controls;

import java.awt.event.ActionEvent;

import javax.swing.AbstractAction;

public class MoveAction extends AbstractAction
{
    private static final long serialVersionUID = 1L;
    Controls direction;
        public MoveAction(Controls direction)
        {
            this.direction = direction;
        }

    @Override
    public void actionPerformed(ActionEvent e)
    {
        if(direction == Controls.UP_ACTION)
        {
            up();
        }
        else if(direction == Controls.DOWN_ACTION)
        {
            down();
        }
        else if(direction == Controls.LEFT_ACTION)
        {
            left();
        }
        else if(direction == Controls.RIGHT_ACTION)
        {
            right();
        }

        System.out.println(direction);
    }

    public void up()
    {

    }

    public void down()
    {

    }

    public void left()
    {

    }

    public void right()
    {

    }
}

感谢@Zachary的回答。 是的

不是


我仍然不知道为什么会这样,因为这两种方法似乎都适用于其他用户。但这是可行的,所以我就要了。

你能发布你的代码来监听键盘活动并调用正确的操作吗?也可能相关:当然@pkpndI不知道这个问题的确切答案。文档没有明确说明不支持“关闭”。我可能建议使用getKeyStroke(KeyEvent.VK_DOWN,0)这很有效,谢谢!
(KeyEvent.VK_UP, 0) 
("UP")