java - JLabel 的 KeyListener 不适合我

标签 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) {

最佳答案

不要使用 KeyListener。一次只有一个组件可以获得焦点,因此您只能移动其中一个 Racket 。

相反,您应该使用KeyBindingsKey Bindings 用于将 Action 绑定(bind)到 KeyStroke,并且组件不需要具有焦点。

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

关于java - JLabel 的 KeyListener 不适合我,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29706114/

相关文章:

java - 为什么我的 java KeyListener 不适用于我的 ubuntu?

java - 在 Java 中将除法的 double 结果转换为 int

java - 将 groovy 添加到目标平台

Eclipse 自动代码完成方法选择不显示父类(super class)方法

java - JTextArea 的输入

java - setOnKeyListener 的工作原理

java - java循环中的计数器和累加器

java - 如何从 Android 中的 POJO 类获取项目?

java - ArrayAdapter.addAll(T... items) 未被 eclipse 标记

java - 添加库为 "Referenced library"