J'ai donc suivi un tutoriel sur YouTube qui vous apprend à écrire un petit jeu en Java. Même si j'ai exactement le même code que celui de la vidéo, j'ai un petit problème.repaint() ne fonctionne pas si j'ajoute un KeyListener
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);
}
Le problème est qu'il semble que repeindre() ne soit pas appelé dès que je l'ajoute KeyListener à mon cadre. Cela fonctionne si enlever le KeyListener. Je ne pense pas que le problème est ma classe KeyHandler car le problème persiste si j'utilise le KeyListener standard.