2016-02-13 82 views
0

誰能告訴我什麼是錯的?我試圖讓廣場上下移動。 當我運行小程序,廣場創建在正確的位置,但是當我按UP鍵或DOWN鍵什麼也沒有發生。Java KeyListener不能在applet中工作

package pong; 

import java.applet.Applet; 
import java.awt.Graphics; 
import java.awt.Graphics2D; 
import java.awt.Rectangle; 
import java.awt.event.KeyEvent; 
import java.awt.event.KeyListener; 

public class pong extends Applet implements KeyListener 
{ 
    private Rectangle rect = null; 
    private int key = 0; 

    public void init() 
    { 
     rect = new Rectangle(0,0,10,10);  
     addKeyListener(this); 
    } 

    public void paint(Graphics g) 
    { 
     setSize(200,200); 
     Graphics2D g2 = (Graphics2D)g; 
     g2.fill(rect); 
    } 

    @Override 
    public void keyPressed(KeyEvent e) 
    { 
     key = e.getKeyCode(); 
    } 

    public void update() 
    { 
     if(key == KeyEvent.VK_UP) 
     { 
      rect.setLocation(rect.x, rect.y - 2); 
     } 
     else if(key == KeyEvent.VK_DOWN) 
     { 
      rect.setLocation(rect.x, rect.y + 2); 
     } 
    } 

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

    } 

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

    } 

} 
+1

時FYI:小程序插件不再支持,有效地使小程序否決。我會考慮從Swing開始(並使用鍵綁定API)或JavaFX – MadProgrammer

+0

1)爲什麼編寫applet?如果是由於老師指定它,請將它們轉介給[爲什麼CS教師應該**停止**教Java applets](http://programmers.blogoverflow.com/2013/05/why-cs-teachers-should -stop教學-java的小應用程序/)。 2)爲什麼使用AWT?看到[這個答案](http://stackoverflow.com/questions/6255106/java-gui-listeners-without-awt/6255978#6255978)有很多很好的理由放棄AWT使用組件有利於Swing。 3)對於Swing,我們通常使用[鍵綁定](https://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html)而不是較低級別的'KeyListener'。 –

回答

0

您需要調用更新方法在keyPressed

@Override 
    public void keyPressed(KeyEvent e) 
    { 
     key = e.getKeyCode(); 
      update(); 

    }