为什么我的KeyListener没有被调用?

时间:2014-11-20 05:47:28

标签: java swing keylistener event-listener

我正在开展一个有两个图像的学校项目......一个好人和一个坏人。我正在使用一个计时器将坏人送给好人,这就是找工作,但是我应该使用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没有被调用?

1 个答案:

答案 0 :(得分:3)

KeyListener是善变的情妇。它始终是所有人的注意力,或者它不会与你交谈。这是什么意思?为了使KeyListener引发事件,注册的组件必须具有焦点并且可以聚焦......

这意味着当另一个组件变焦时(如按钮),KeyListener将不再响应。

相反,您应该使用密钥绑定API,它旨在克服此问题。有关详细信息,请参阅How to Use Key Bindings