我有一个 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);
}
}