我正在开展一个有两个图像的学校项目......一个好人和一个坏人。我正在使用一个计时器将坏人送给好人,这就是找工作,但是我应该使用KeyListener将好人移向或远离坏人....然后最终攻击但那是为了以后的事。
我只是想让我的“好人”继续使用KeyListener并且不会被调用。我不明白为什么。
这是我的构造函数,它在我的主面板中调用了EventLIstener:
//monster 1 coordinates
int mon1x = 0;
int mon1y = 300;
KeyListenerAction myKeyActionListener = new KeyListenerAction();
public BlobFighterPanel()
{
addKeyListener(myKeyActionListener);
this.setPreferredSize(new Dimension(1300,600)); //set size of main panel
//add button
startButton.addActionListener(startListener);
add(startButton);
}
然后在下面我有我的KeyListener,但它没有被调用:
public class KeyListenerAction implements KeyListener {
public void keyPressed (KeyEvent event)
{
switch(event.getKeyCode())
{
case KeyEvent.VK_LEFT:
goodx -= 10;
break;
case KeyEvent.VK_RIGHT:
System.out.println("Right");
goodx += 10;
break;
}
repaint();
}
public void keyTyped(KeyEvent event){}
public void keyReleased(KeyEvent event){}
}
我做错了什么?为什么我的KeyListener没有被调用?
答案 0 :(得分:3)
KeyListener
是善变的情妇。它始终是所有人的注意力,或者它不会与你交谈。这是什么意思?为了使KeyListener
引发事件,注册的组件必须具有焦点并且可以聚焦......
这意味着当另一个组件变焦时(如按钮),KeyListener
将不再响应。
相反,您应该使用密钥绑定API,它旨在克服此问题。有关详细信息,请参阅How to Use Key Bindings