JPanel没有响应keylistener

时间:2014-03-20 23:44:33

标签: keylistener

我试图制作一个JPanel,它会显示你按下每个导航键的次数,但它只显示4个零。

//在keyPressed()方法中,我将以下代码相应地处理按键:

public void keyPressed(KeyEvent event) 
{
    if(event.getKeyCode()==KeyEvent.VK_LEFT)
    left++;             
    else if(event.getKeyCode()==KeyEvent.VK_RIGHT)
    right++;            
    else if(event.getKeyCode()==KeyEvent.VK_UP)
    up++;               
    else if(event.getKeyCode()==KeyEvent.VK_DOWN)
    down++;
}

//绘制JPanel上的计数的paint方法

public void paintComponent(Graphics g)
{
    super.paintComponent(g);
    g.drawString ( Integer.toString(left),   100, 100 );
    g.drawString ( Integer.toString(right),  200, 100 );
    g.drawString ( Integer.toString(up),     100, 200 );
    g.drawString ( Integer.toString(down),   200, 200 );    
}

2 个答案:

答案 0 :(得分:6)

  • 最后在repaint();方法中致电keyPressed()

  • count_keys.setFocusable(true);方法下方的main方法中调用JPanel

由于KeyListener无法关注,因此{{1}}无效。

答案 1 :(得分:5)

欢迎来到KeyListener的精彩世界。

KeyListener按设计,只能在注册的组件可对焦并且具有焦点时才响应关键事件。

这通常使它们在游戏环境中成为一个糟糕的选择,在游戏环境中你可能有许多组件可以从主游戏组件中抢夺焦点。

相反,您应该使用Key bindings

相关问题