2015-12-14 82 views
1

KeyDemo类我实现KeyListener,但我不明白为什么KeyEvent s不起作用。我按键,但没有发生。这只是一个很短的Demo班的一个大班。有人帮我解决这个问题。为什么KeyEvent虽然实现了KeyListener接口,却不工作?

import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 

public class KeyDemo extends JPanel implements KeyListener { 

    public KeyDemo() { 
     // TODO Auto-generated constructor stub 
     addKeyListener(this); 
    } 

    @Override 
    public void keyPressed(KeyEvent e) { 

     switch (e.getKeyCode()) { 
     case KeyEvent.VK_UP: 
      System.out.println("moving up"); 
      break; 
     case KeyEvent.VK_RIGHT: 
      robot.moveRight(); 
      robot.setMovingRight(true); 
      break; 
     } 
    } 

    @Override 
    public void keyReleased(KeyEvent e) { 

     switch (e.getKeyCode()) { 
     case KeyEvent.VK_UP: 
      System.out.println("stop moving up"); 
      break; 
     case KeyEvent.VK_LEFT: 
      robot.stopLeft(); 
      break; 
     } 
    } 

    @Override 
    public void keyTyped(KeyEvent e) { 
     // TODO Auto-generated method stub 

    } 
} 

主要类:

public class Main{ 
    public static void main(String[] args){ 
     JFrame f = new JFrame(); 
     f.setSize(400, 400); 
     f.setVisible(true); 
     KeyDemo demo = new KeyDemo(); 
     f.add(demo); 
    } 
} 

回答

0

这是一个焦点问题。

尝试打标签获得焦点的面板上或调用

demo.requestFocus(); 
+0

我已经击中了'Tab',添加了'demo.requestFocus()',但没有任何工作。为什么? @Paco Abato –

+0

谢谢大家。我的问题已解决。 –

0

可能是你KeyDemo类没有焦点。

总之,这些天,推荐的方法做,这是与按键绑定:https://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html

+0

我给自己定'KeyDemo'类'可聚焦TRUE'。但它不起作用。有什么问题发生actullay? –

+0

我设置了'KeyDemo'类'focusable true'。但它不起作用。有什么问题发生actullay? @ControlAltDel –