0
因此,我遵循了一個YouTube教程,教你如何用Java編寫一個小遊戲。儘管我和視頻中的人有完全一樣的代碼,但我遇到了一些問題。如果我添加KeyListener,repaint()不起作用
public class Screen extends JPanel implements Runnable {
Thread thread = new Thread(this);
Frame frame;
int fps = 0;
int scene;
boolean running = false;
public Screen(Frame frame) {
this.setFocusable(true);
this.frame = frame;
frame.addKeyListener(new KeyHandler(this));
thread.start();
}
@Override
public void paintComponent(Graphics g) {
super.paintComponent(g);
g.clearRect(0, 0, this.frame.getWidth(), this.frame.getHeight());
if (scene == 0) {
g.setColor(Color.BLUE);
} else if (scene == 1) {
g.setColor(Color.GREEN);
} else {
g.setColor(Color.WHITE);
}
g.fillRect(0, 0, getWidth(), getHeight());
g.setColor(Color.BLACK);
g.drawString(fps + "", 10, 10);
}
public void run() {
System.out.println("[Success] Frame Created!");
long lastFrame = System.currentTimeMillis();
int frames = 0;
running = true;
scene = 0;
while (running) {
repaint();
frames++;
if (System.currentTimeMillis() - 1000 >= lastFrame) {
fps = frames;
frames = 0;
lastFrame = System.currentTimeMillis();
}
try {
Thread.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
System.exit(0);
}
問題是,當我將KeyListener添加到我的框架後,似乎重新調用()不會被調用。如果刪除KeyListener,它將起作用。我不認爲問題是我的KeyHandler類,因爲如果我使用標準的KeyListener,問題依然存在。