2015-12-14 123 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 –