当我按下向上或向下箭头时,我的代码出现问题。 这是我的代码,对不起我的英语。 这是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) {
答案 0 :(得分:2)
不要使用KeyListener。每次只有一个组件可以拥有焦点,因此您只能移动其中一个球拍。
相反,您应该使用KeyBindings
。 Key Bindings
用于将Action
绑定到KeyStroke
,并且该组件无需关注。
查看Motion Using the Keyboard了解详情。 KeyboardAnimation.java
甚至有一个使用两个标签的示例。
答案 1 :(得分:0)
您的问题可能是JLabel不是焦点所有者。默认情况下,JLabel不可聚焦。你需要打电话
yourLabel.setFocusable(true);
yourLabel.requestFocus();
然后它应该有用。