Probléme de disparition

Résolu
aqet - Modifié le 20 avril 2023 à 17:31
 aqet - 1 mai 2023 à 11:12

Bonjour,

Svp j'aimerais faire apparaitre et en suit faire disparaitre  une figure comme un cercle mais une fois qu'il apparait je n'arrive plus à le faire disparaitre

voici le code en question(il fait apparaitre 3 cercle en un intervalle de temps )

je voudrai que lorsque le premier cercle apparait il disparait avant que le second n'apparaisse. 

​
package javaapplication3;

import javax.swing.*;
import java.awt.*;

public class JavaApplication3 extends JFrame {

public JavaApplication3(){
        setTitle("Drawing a Circle");
        setSize(400, 400);
        setVisible(true);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    }

    @Override
    public void paint(Graphics g) {
        int a=0;
        int i;
        int j = 1;
            if (j == 1) {
                for (i=1;i<=3;i++){
                    try {
                        Thread.sleep(1000);
                        a=a+5;
                        Graphics2D g2d = (Graphics2D) g;
                        g2d.drawOval(a, 150, 100, 100);
                        
                    } catch (InterruptedException ie) {
                        
                    }
                }
            }    
    }

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 127
22 avril 2023 à 17:16

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();
        }
    }
}

0

merci beaucoup

0
Rejoignez-nous