2016-02-13 58 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(); 

    }