我目前正在创建一个小跳转并在Java中运行。我最近想从KeyListener切换到Inputmap,因为KeyListener有时似乎没有响应。

我有一个名为JWindow的自定义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,则此按键无效。

07-28 04:10