1

我有一个 java 程序,我为我的关键事件使用了 KeyBinding。我还在为我的 JFrame 使用 CardLayout。

问题是 KeyBindings 不起作用,除非我单击另一个窗口并返回到我的 JFrame。例如,我使用我的应用程序并使用 Google Chrome 并返回到我的 JFrame。然后 KeyBinding 起作用。

这是我的代码:

package display.game;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.AbstractAction;
import javax.swing.Action;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.KeyStroke;

public class Game extends JPanel {
    private static final long serialVersionUID = 1L;
    // ------VARIABLES-----//
    @SuppressWarnings("unused")
    private int _W = 1000;

    private ImageIcon blue_paddle_img = new ImageIcon(getClass().getResource(
            "res/PNG Files/paddle_blue.png"));
    private Blue_Paddle blue_paddle = new Blue_Paddle(blue_paddle_img);

    private ImageIcon red_paddle_img = new ImageIcon(getClass().getResource(
            "res/PNG Files/paddle_red.png"));
    private Red_Paddle red_paddle = new Red_Paddle(red_paddle_img);

    public Game() {
        setLayout(null);
        addComponents();
        setBackground(Color.BLACK);
        setFocusable(true);

        //KEYBINDING
        setInputMap(WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, getInputMap());
        KeyStroke key = KeyStroke.getKeyStroke(KeyEvent.VK_DOWN, 0);
        getInputMap().put(key, "pressed");
        getActionMap().put("pressed", new AbstractAction() {
            public void actionPerformed(ActionEvent arg0) {
                blue_paddle.move(0,5);
                addComponents();

            }

        });

    }

    public void addComponents() {
        blue_paddle.move(0, 0);
        add(blue_paddle);

        red_paddle.move(0, 0);
        add(red_paddle);
    }

}
4

0 回答 0