gpt4 book ai didi

java - KeyListener 未添加

转载 作者:行者123 更新时间:2023-12-01 07:34:44 24 4
gpt4 key购买 nike

我很确定我在这里遗漏了一些非常简单的东西,但我就是找不到它!

这是我的 GamePanel 类的声明:

private class GamePanel extends JPanel implements KeyListener {

在其构造函数中是:

addKeyListener(this);

也在构造函数中:

        new Thread(new Runnable() {

@Override
public void run() {
while (true) {
index ++;
index = index >= 15 ? 0 : index;
if (aPress) {
playerX --;
}
if (dPress) {
playerX ++;
}
repaint();
try {
Thread.sleep(25);
} catch (InterruptedException e) {}
}
}

}).start();

在类里面:

    @Override
public void keyPressed(KeyEvent e) {
System.out.println("Key pressed!");
if (e.getKeyCode() == KeyEvent.VK_A) {
aPress = true;
}
if (e.getKeyCode() == KeyEvent.VK_D) {
dPress = true;
}
}
@Override
public void keyReleased(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.VK_A) {
aPress = false;
}
if (e.getKeyCode() == KeyEvent.VK_D) {
dPress = false;
}
}

最后:

JFrame f = new JFrame();
//set up f
f.add(new GamePanel());
f.setVisible(true);

我什至在我的keyPressed方法中添加了System.out.println,但它不会打印!我错过了什么?

最佳答案

KeyListener 是一个善变的情妇。注册 KeyListener 的组件必须是可聚焦的,并且必须具有焦点才能接收按键事件。

注册监听器后,尝试添加 setFocusable(true);requestFocusInWindow();

更好的主意是使用 key bindings ,这样就解决了焦点问题。

InputMap im = getInputMap(WHEN_IN_FOCUSED_WINDOW);
ActionMap am = getActionMap();
im.put(KeyStroke.getKeyStroke(KeyEvent.VK_A, 0, false), "a.pressed");
am.put("a.pressed", new AbstractAction() {
public void actionPerformed(ActionEvent evt) {
aPress = true;
}
});

关于java - KeyListener 未添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13618127/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com