JLabel的KeyListener不为我工作

时间:2015-04-17 17:46:00

标签: java eclipse keylistener

当我按下向上或向下箭头时,我的代码出现问题。 这是我的代码,对不起我的英语。 这是Racket 1的一部分,Racket 2 id的部分类似。

//--->Racket 1 :
    Racket1.addKeyListener(this);
    Racket1.setBounds(50, 200, 16, 100);   //<----- setBounds (Placer position du JLabel x,y + taille de la plateforme x,y)
    Racket1.setBackground(Color.white);
    Racket1.setOpaque(true);
    Racket1.setFocusable(true);            //<----- Permet d'utiliser KeyListener Pour un JLabel
    Racket1.requestFocus();

这是keyListener的一部分:

 public void keyTyped (KeyEvent e) {            
  }

public void keyPressed(KeyEvent e) {            


    if (e.getKeyCode() == KeyEvent.VK_UP) {         
        Racket1.setLocation(Racket1.getX(), Racket1.getY() +20);     
    }           

    else if (e.getKeyCode() == KeyEvent.VK_DOWN) {          
        Racket1.setLocation(Racket1.getX(), Racket1.getY() -20);            
    }           

    else if (e.getKeyCode() == 'z') {           
        Racket2.setLocation(Racket2.getX(), Racket2.getY() +20);            
    }           

    else if (e.getKeyCode() == 's') {           
        Racket2.setLocation(Racket2.getX(), Racket2.getY() -20);            
    }       
}

public void keyReleased(KeyEvent e) {

2 个答案:

答案 0 :(得分:2)

不要使用KeyListener。每次只有一个组件可以拥有焦点,因此您只能移动其中一个球拍。

相反,您应该使用KeyBindingsKey Bindings用于将Action绑定到KeyStroke,并且该组件无需关注。

查看Motion Using the Keyboard了解详情。 KeyboardAnimation.java甚至有一个使用两个标签的示例。

答案 1 :(得分:0)

您的问题可能是JLabel不是焦点所有者。默认情况下,JLabel不可聚焦。你需要打电话

yourLabel.setFocusable(true);
yourLabel.requestFocus();

然后它应该有用。