Java KeyListener未添加
我很确定我错过了一些很简单的东西,但我就是找不到 以下是我的Java KeyListener未添加,java,swing,keylistener,Java,Swing,Keylistener,我很确定我错过了一些很简单的东西,但我就是找不到 以下是我的游戏面板类的声明: private class GamePanel extends JPanel implements KeyListener { 在其构造器中: addKeyListener(this); 同样在构造函数中: new Thread(new Runnable() { @Override public void run() {
游戏面板类的声明:
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
,但它不会打印!我缺少什么?添加setFocusable(true)代码>到游戏面板构造器。KeyListener
是个易变的情妇。注册了KeyListener
的组件必须是可聚焦的,并且必须具有焦点才能接收关键事件
尝试添加setFocusable(true)代码>和requestFocusInWindow()代码>在注册侦听器之后
一个更好的办法是使用,这将超越焦点问题
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;
}
});
我看不到requestFocusInWindow()
或对共享按键的同步访问。“好吧,我明天就试试看;我现在要睡觉了,为变化无常的情妇准备+1(哦,是的,还有一点是为了提到键绑定)