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