當我啓動我的小程序時,我沒有收到關鍵聽衆的響應。我該如何解決?以下是代碼。小程序 - KeyListener不起作用
import java.applet.Applet;
import java.awt.Graphics;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.util.Timer;
import java.util.TimerTask;
public class Main extends Applet {
private static final long serialVersionUID = 1L;
public String mode = "";
public Graphic gr;
public void init() {
this.setSize(400, 400);
gr = new Graphic();
this.add(gr);
gr.addKeyListener(new MyKeyListener());
TimerTask timerTask = new TimerTask() {
@Override
public void run() {
gr.requestFocus();
gr.repaint();
}
};
new Timer().scheduleAtFixedRate(timerTask, 0, 1000/5);
}
public void paint(Graphics g) {
}
private class MyKeyListener extends KeyAdapter {
public MyKeyListener(){
System.out.println("HELLO");
}
public void keyPressed(KeyEvent e) {
switch (e.getKeyCode()) {
case KeyEvent.VK_UP:
gr.direction = Graphic.Direction.up;
gr.move();
break;
case KeyEvent.VK_DOWN:
gr.direction = Graphic.Direction.down;
gr.move();
break;
case KeyEvent.VK_LEFT:
gr.direction = Graphic.Direction.left;
gr.move();
break;
case KeyEvent.VK_RIGHT:
gr.direction = Graphic.Direction.right;
gr.move();
break;
}
}
public void keyReleased(KeyEvent e) {
}
}
}
*「我沒有收到關鍵監聽器的響應。」*給定代碼,如'public void paint(Graphics g){0} {0}我很驚訝,你什麼都得到。 1)爲什麼在第3個千年AWT? 2)爲什麼applet而不是框架? 3)爲什麼'KeyListener'而不是鍵綁定? 4)爲什麼不打電話給任何提及'重點'的方法?有關詳細信息,請參閱[focus](http://docs.oracle.com/javase/tutorial/uiswing/misc/focus.html)教程。 - 看起來你在嘗試「通過魔法編碼」,而這通常不起作用。 –
'this.setSize(400,400);'不要這樣做。小程序大小由HTML中的屬性設置。 –
試圖抓住焦點使用這樣的計時器是任何時候一個可怕的想法,永遠不要這樣做(我知道「只是一個測試」 - 但聲明站立)。避免使用關鍵偵聽器並支持[鍵綁定](http://docs.oracle.com/javase/tutorial/uiswing/misc/keybinding.html),它們不會像KeyListener的 – MadProgrammer