【问题标题】:KeyListener for JLabel don't work for me [duplicate]JLabel 的 KeyListener 对我不起作用 [重复]
【发布时间】:2015-06-24 17:06:29
【问题描述】:

当我按下向上或向下箭头时,我的代码出现问题,但没有任何反应。 这是我的代码,对不起我的英语。 这是球拍 1 的部分,球拍 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) {

【问题讨论】:

  • 球拍有什么作用?
  • 您可能想要更具体地了解行为以及您尝试过的内容。您是否检查过是否调用了 keyPressed() 方法?
  • 球拍应该是移动的,有两个乒乓球拍
  • macserv 我真的不明白你的问题是什么意思(我是编程的初学者)

标签: java eclipse keylistener


【解决方案1】:

不要使用 KeyListener。一次只能聚焦一个组件,因此您只能移动其中一个球拍。

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

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

【讨论】:

    【解决方案2】:

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

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

    然后它应该可以工作了。

    【讨论】:

    • 我做到了,我的 JLabel 是可聚焦的 我使用了 setFocusable 和 requestfocus 函数。
    • 鉴于有两个球拍,使用这种方法您只能移动一个球拍。不要使用 KeyListener!
    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 1970-01-01
    • 2017-09-06
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多