Bonjour,
La méthode paint(Graphics) est appelée à chaque fois que la fenêtre doit être dessinée (à l'affichage initial, à chaque redimensionnement de la fenêtre, etc.) et à chaque fois c'est l'intégralité du code qui est appelé avant d'afficher ce qui a été dessiné.
Dans ton cas, tu fais une boucle qui fait une attente de 1 seconde à chaque tour, ça ne sert à rien, parce qu'au final ce qui sera affiché c'est le résultat final du dessin, celui obtenu à la fin de la boucle, donc après les 3 secondes d'attentes qui n'ont pour effet que de geler la fenêtre en attendant de rendre la main.
Pour ce que tu veux faire, dans la méthode paint tu ne dois faire qu'un seul cercle, c'est en dehors de cette méthode d'affichage, par exemple dans ton main, que tu fois faire une boucle qui va afficher le cercle.
Exemple :
package javaapplication3; import javax.swing.JFrame; import java.awt.Color; import java.awt.Graphics; public class JavaApplication3 extends JFrame { private int a = 0; private int lastA = a; public JavaApplication3() { setTitle("Drawing a Circle"); setSize(400, 400); setVisible(true); setDefaultCloseOperation(EXIT_ON_CLOSE); } @Override public void paint(Graphics g) { // on efface le cercle avec la valeur "lastA" g.setColor(Color.WHITE); g.drawOval(lastA, 150, 100, 100); // on dessine le cercle avec la valeur "a" g.setColor(Color.BLACK); g.drawOval(a, 150, 100, 100); lastA = a; } public static void main(String[] args) throws InterruptedException { JavaApplication3 app = new JavaApplication3(); for (int i = 1; i <= 3; i++) { Thread.sleep(1000); app.a = app.a + 5; app.repaint(); } } }
1 mai 2023 à 11:12
merci beaucoup