JLabel的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) {
不要使用KeyListener。 一次只能有一个组件具有焦点,因此您只能移动其中一个球拍。
相反,你应该使用KeyBindings
。 Key Bindings
用于将Action
绑定到KeyStroke
,组件不需要具有焦点。
有关详细信息,请参阅使用键盘进行运动 。 KeyboardAnimation.java
甚至有一个使用两个标签的示例。
您的问题可能是JLabel不是焦点所有者。 默认情况下,JLabel不可聚焦。 你需要打电话
yourLabel.setFocusable(true); yourLabel.requestFocus();
然后它应该工作。