Partage
  • Partager sur Facebook
  • Partager sur Twitter

pourquoi le code s execute 3 fois?

    21 avril 2022 à 10:58:06

    bonjour

    dans le code suivant qui dessine une ovale sur un fond orange,on a un message "je suis executé" qui s affiche dans la console a chaque passage;mais pourquoi s execute t il 3 fois  a chaque fois que je lance mon code? (le code est evidement issu de "apprenez a programmer en java "de cysboy sur openclassroom)

    package fenetre4avecovale;
    
    
    
    public class main {
    
    	public static void main(String[] args) {
    		fenetre fen = new fenetre();
    
    	}
    
    }
    
    package fenetre4avecovale;
    
    import java.awt.Color; 
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    
    public class fenetre extends JFrame {
      public fenetre(){ 
    	
        this.setTitle("Ma troisieme fenêtre Java");
        this.setSize(100, 150);
        this.setLocationRelativeTo(null);               
        this.setContentPane(new Panneau());
        //Instanciation d'un objet JPanel
        Panneau pan = new Panneau();
        //Définition de sa couleur de fond
       pan.setBackground(Color.ORANGE);        
        //On prévient notre JFrame que notre JPanel sera son content pane
        this.setContentPane(pan);  
        
        this.setVisible(true);
      }       
    }
    package fenetre4avecovale;
    
    import java.awt.Graphics;
    import javax.swing.JPanel;
    //import java.awt.Color;
    public class Panneau extends JPanel { 
      public void paintComponent(Graphics g){
    	  super.paintComponent(g);//necessaire pour la couleur,voir https://openclassrooms.com/forum/sujet/couleur-de-fond-de-jpanel-76952
    	  //necessaire pour dire fait le dessin comme j ai initialisé le panneau
        //Vous verrez cette phrase chaque fois que la méthode sera invoquée
        System.out.println("Je suis exécutée !"); 
        g.fillOval(20, 20, 75, 75);
      
      }
    
               
    }

    merci de m expliquer


    • Partager sur Facebook
    • Partager sur Twitter
      21 avril 2022 à 14:59:29

      ça veut dire que la méthode paintComponent est appelé 3 fois. En fait, elle est appelée à chaque qu'il y a besoin de "repeindre" Panneau (changement de la taille de la fenêtre, redimensionnement, affichage après réduction/maximisation, ...)

      Ta ligne 13 dans la classe fenetre ne sert à rien et il manque cette ligne pour fermer proprement l'application

      //Ferme-toi lorsqu'on clique sur "Fermer" !
       this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

      Il a peut-être aussi des différences selon le JDK ou l'OS (j'ai testé sous win10 avec IntelliJ IDEA Community et jdk18

      • Partager sur Facebook
      • Partager sur Twitter
        22 avril 2022 à 10:40:41

        ok merci umfred pour la rectification du code

        par contre ,c est justement le point de detail des 3 appels a paint component qui ne m est pas clair

        je pensais que le programme etait lu tour a tour, pour ainsi dire;on part du main qui renvoi a la classe fenetre puis a la classe panneau et ca revient a fenetre puis ca retourne quand on ferme a main;dans ma logique,quand je ne fait que executer le programme ,sans changer de taille de fenetre sans cliquer dessus ,bref sans rien faire,je pensais ne devoir passer par paint component qu une seule fois,donc ,une seule fois aussi par la classe panneau;ca veut donc dire que la classe panneau tourne,et donc que ma classe fenetre est lue en boucle permanente jusqu a ce que je ferme le programme?

        • Partager sur Facebook
        • Partager sur Twitter
          22 avril 2022 à 10:51:55

          J'ai oublié de préciser (je croyais l'avoir fait) que lors de mon test, je n'ai eu qu'une seule fois le message.
          Est-ce que tu n'as que ces 3 classes là dans ton projet ?
          • Partager sur Facebook
          • Partager sur Twitter
            25 avril 2022 à 18:32:30

            oui, je n ai que ces 3 classes,et le message s affiche 3 fois quand je demarre alors que je ne fais rien d autre
            • Partager sur Facebook
            • Partager sur Twitter

            pourquoi le code s execute 3 fois?

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown