2013-07-16 36 views
3

我有這樣的代碼:的KeyListener沒有達到我的switch語句

import java.awt.Color; 
    import java.awt.Graphics; 
    import java.awt.event.KeyEvent; 
    import java.awt.event.KeyListener; 
    import java.awt.event.MouseEvent; 
    import java.awt.event.MouseListener; 

    import javax.swing.JApplet; 


    public class applet extends JApplet implements KeyListener, MouseListener{ 
     int a = 0; 
     int b = 0; 
     public void init(){ 
      setSize(500,500); 
      addKeyListener(this); 
      addMouseListener(this); 
     } 
     public void paint(Graphics g){ 
      g.setColor(Color.BLUE); 
      g.fillRect(a, b, 400, 400); 
     } 
     @Override 
     public void keyPressed(KeyEvent e) { 
     System.out.println("Hello!")  
switch(e.getKeyCode()){ 
       case KeyEvent.VK_DOWN: a -= 5; 
       break; 
       case KeyEvent.VK_UP: a += 5; 
       break; 
       case KeyEvent.VK_RIGHT: b += 5; 
       break; 
       case KeyEvent.VK_LEFT: b -= 5; 
       break; 
      } 
      repaint(); 
     } 
     @Override 
     public void keyReleased(KeyEvent e) { 
      // TODO Auto-generated method stub 

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

     } 
     @Override 
     public void mouseClicked(MouseEvent arg0) { 
      // TODO Auto-generated method stub 

     } 
     @Override 
     public void mouseEntered(MouseEvent arg0) { 
      // TODO Auto-generated method stub 

     } 
     @Override 
     public void mouseExited(MouseEvent arg0) { 
      // TODO Auto-generated method stub 

     } 
     @Override 
     public void mousePressed(MouseEvent arg0) { 
      // TODO Auto-generated method stub 

     } 
     @Override 
     public void mouseReleased(MouseEvent arg0) { 
      // TODO Auto-generated method stub 

     } 
    } 

,它甚至沒有達到switch語句,如可以通過我調試的println代碼可以看出。爲什麼會發生這種情況,我該如何解決這個問題?請不要討厭這是否太寬泛,因爲我是一個完整的noob在這個問題上

+0

http://stackoverflow.com/questions/13595208/applet-keylistener-not-working?rq=1 –

+0

也1-避免重寫'頂層容器paint',而是使用類似於'JPanel'並覆蓋它的'paintComponent'方法並將其添加到小程序中並且2-確保您調用'super.paintXxx' – MadProgrammer

+1

請參見[Motion Using the Keyboard](http://tips4java.wordpress.com/2013/06/09/motion-using-the-keyboard /)來解決使用KeyListener的問題以及使用Key Bindings的示例解決方案。 – camickr

回答

6

KeyListener只會觸發事件,如果它註冊的組件是可以聚焦和焦點。

JApplet具有JRootPane增加了一個JLayeredPane和內容窗格(除其他事項外)ontop的小應用程序,這可能意味着鍵聽者可能永遠也能夠開始事件的通知(如其它元件阻擋的話)的。

相反,使用Key Bindings