Java InputMap 不注册 Shift 键
Java InputMap does not register Shift presses
我目前正在 Java 中创建一个小跳跃和 运行。我最近想从 KeyListener 切换到 Inputmap,因为 KeyListener 有时似乎没有响应。
我有一个名为 Window 的自定义 JFrame,带有一个 JPanel 和以下代码:
public class EditorGamePanel extends JPanel {
Window parent;
MainGame maingame;
public EditorGamePanel(Window parent) {
this.parent = parent;
setLayout(null);
Canvas canvas = new MainGame(parent);
canvas.setBounds(0, 0, 1920, 1080);
add(canvas);
maingame = (MainGame) canvas;
InputMap im = getInputMap(WHEN_IN_FOCUSED_WINDOW);
ActionMap am = getActionMap();
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_SHIFT, 0, false), "pressed");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_SHIFT, 0, true), "released");
am.put("pressed", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Pressed");
}
});
am.put("released", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("released");
}
});
}
}
问题是它没有记录我按下 Shift,但它确实记录了我放开 Shift。 w 之类的其他键似乎在两种情况下都可以正常工作。我似乎无法在文档中找到任何错误或任何帮助。
您可能对下移击键使用了错误的 KeyStroke。而不是:
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_SHIFT, 0, false), "pressed");
尝试:
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_SHIFT, InputEvent.SHIFT_DOWN_MASK, false), "pressed");
因为如果掩码设置为 0,则此击键无效。
我目前正在 Java 中创建一个小跳跃和 运行。我最近想从 KeyListener 切换到 Inputmap,因为 KeyListener 有时似乎没有响应。
我有一个名为 Window 的自定义 JFrame,带有一个 JPanel 和以下代码:
public class EditorGamePanel extends JPanel {
Window parent;
MainGame maingame;
public EditorGamePanel(Window parent) {
this.parent = parent;
setLayout(null);
Canvas canvas = new MainGame(parent);
canvas.setBounds(0, 0, 1920, 1080);
add(canvas);
maingame = (MainGame) canvas;
InputMap im = getInputMap(WHEN_IN_FOCUSED_WINDOW);
ActionMap am = getActionMap();
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_SHIFT, 0, false), "pressed");
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_SHIFT, 0, true), "released");
am.put("pressed", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("Pressed");
}
});
am.put("released", new AbstractAction() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println("released");
}
});
}
}
问题是它没有记录我按下 Shift,但它确实记录了我放开 Shift。 w 之类的其他键似乎在两种情况下都可以正常工作。我似乎无法在文档中找到任何错误或任何帮助。
您可能对下移击键使用了错误的 KeyStroke。而不是:
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_SHIFT, 0, false), "pressed");
尝试:
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_SHIFT, InputEvent.SHIFT_DOWN_MASK, false), "pressed");
因为如果掩码设置为 0,则此击键无效。