IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AWT/Swing Java Discussion :

Probleme methode repaint()


Sujet :

AWT/Swing Java

  1. #1
    Membre confirmé Avatar de cybercrisp
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Par défaut Probleme methode repaint()
    Bonjour,
    je suis debutant en java et je tente d'afficher sur une zone de dessin:un texte(forme) muni d'une couleur controlé via une boite d'outils (sur celle ci deux listes et deux boutons).Mon probleme concerne de reaffichage de ce texte, surement la cause d'une mauvaise programmation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
     
     
    public class outils extends JPanel implements ActionListener,ItemListener  {
     
        private String form;
        private Color lacouleur;
     
        JButton Ok;
        JButton Efface;
        malisteForme  mf=new malisteForme();
        malisteCouleur mc=new malisteCouleur();
     
        dess d=new dess();
     
           public Color getlacouleur()
        {
          return this.lacouleur;
        }
         public void setlacouleur(Color lacouleur)
         {
         this.lacouleur=lacouleur;
         } 
     
         public String getlaforme()
        {
         return this.form;
        }
         public void setlaforme(String form)
        {
         this.form=form;
        }
     
     
     
     
         public Color retournecouleur(String couleur)
         {  
         Color obj=Color.WHITE;
         if(couleur.equals("Rouge"))
              obj=Color.RED;
         if(couleur.equals("Bleu"))
              obj=Color.BLUE;
         if(couleur.equals("Vert"))
              obj=Color.GREEN;
         if(couleur.equals("Jaune"))
              obj=Color.YELLOW;
         if(couleur.equals("Noir"))
              obj=Color.BLACK;
         return obj;
         }
     
     
     
     
          public void itemStateChanged(ItemEvent e)
         {
          Object obj=e.getSource();
          if(obj==this.mf)
          {
          d.setlafor(mf.getSelectedItem());
          repaint();
          }
          if(obj==this.mc)
          {
           d.setlacoul(retournecouleur(mc.getSelectedItem()));
           repaint();
          }  
          }
     
           public void actionPerformed(ActionEvent e)
          {
     
           Object obj=e.getSource();
           if(obj==this.Ok)
           {
           d.repaint();
           }
           if(obj==this.Efface)
           {
            System.out.println("action sur le bouton efface");
           }
          }
     
     
          public outils()
        {
            super();
            setBackground(Color.BLACK);
            add(this.mf);
            mf.addItemListener(this);
            add(this.mc);
            mc.addItemListener(this);
            Ok=new JButton("OK");
            add(Ok);
            Ok.addActionListener(this);
            Efface=new JButton("Effacer");
            add(Efface);
            Efface.addActionListener(this);
            setVisible(true);
        }
     
    }

    et voila la classe dessin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.Graphics;
     
     
     
    public class dess  extends Panel{
     
     
        private Color lacoul=Color.YELLOW;
        private String lafor="triangle";
     
     
          public Color getlacoul()
         {
            return this.lacoul;
         }
           public String getlafor()
         {
            return this.lafor;
         }
     
          public void setlacoul(Color lacoul)
         {
           this.lacoul=lacoul;
         }
          public void setlafor(String laform)
         {
           this.lafor=laform;
         } 
     
     
        public dess() 
        {
            super();
            setBackground(Color.YELLOW);
            setSize(300,300);
            setVisible(true);
        }
     
        public void paint(Graphics g)
        { 
          super.paint(g);
          lafor=this.getlafor();
          g.drawString(lafor,150,150);  
          g.setColor(this.getlacoul());
        }
     }
    Merci d'avance pour votre aide.Bonne journée

  2. #2
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Bonjour,

    j'ai quelques remarques, qui devraient t'aider un peu :

    1° au niveau "programmer proprement" :
    - la classe dess hérite de Panel, il vaudrait mieux qu'elle hérite de JPanel. Il faut éviter de mélanger awt et swing ;
    - plutot que de surcharger paint(Graphics g) dans dess, surcharge paintComponent(Graphics g), qui est définie dans JPanel ;
    - éventuellement, renseigne-toi sur les convention de codage (nom des classes commençant par une majuscule, etc), ça t'aidera quand ton programme grossira.

    2° au niveau "pourquoi ça marche pas" :
    - déjà, il faut appeler g.setColor avant g.drawString sinon, ça va pas marcher;

    A part ça, t'es pas trop mal parti.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  3. #3
    Membre confirmé Avatar de cybercrisp
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Par défaut
    j'ai bien suivi tes conseils,enfin je pense! donc voila:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
     
     
     
    public class BoiteOutils extends JPanel implements ActionListener,ItemListener  {
     
        private String laforme;
        private Color lacouleur;
     
        JButton Ok;
        JButton Efface;
        malisteForme  mf=new malisteForme();
        malisteCouleur mc=new malisteCouleur();
        ZoneDessin zd=new ZoneDessin();
     
     
     
     
         public Color getLacouleur()
        {
          return this.lacouleur;
        }
         public void setLacouleur(Color lacouleur)
         {
         this.lacouleur=lacouleur;
         } 
     
         public String getLaforme()
        {
         return this.laforme;
        }
         public void setLaforme(String laforme)
        {
         this.laforme=laforme;
        }
     
     
     
     
         public Color retourneCouleur(String couleur)
         {  
         Color obj=Color.WHITE;
         if(couleur.equals("Rouge"))
              obj=Color.RED;
         if(couleur.equals("Bleu"))
              obj=Color.BLUE;
         if(couleur.equals("Vert"))
              obj=Color.GREEN;
         if(couleur.equals("Jaune"))
              obj=Color.YELLOW;
         if(couleur.equals("Noir"))
              obj=Color.BLACK;
         return obj;
         }
     
     
     
     
          public void itemStateChanged(ItemEvent e)
         {
          Object obj=e.getSource();
          if(obj==this.mf)
          {
          this.setLaforme(mf.getSelectedItem());
          zd.setLaforme(this.getLaforme());
          }
          if(obj==this.mc)
          {
           this.setLacouleur(retourneCouleur(mc.getSelectedItem()));
           zd.setLacouleur(this.getLacouleur());
          }  
          }
     
           public void actionPerformed(ActionEvent e)
          {
     
           Object obj=e.getSource();
           if(obj==this.Ok)
           {   
               zd.repaint();
           }
           if(obj==this.Efface)
           {
     
           }
          }
     
     
           public void dessiner(Graphics g)
           {
            g.drawString(this.getLaforme(),100,100);
           }
     
     
     
          public BoiteOutils()
        {
            super();
            setBackground(Color.BLACK);
            add(this.mf);
            mf.addItemListener(this);
            add(this.mc);
            mc.addItemListener(this);
            Ok=new JButton("OK");
            add(Ok);
            Ok.addActionListener(this);
            Efface=new JButton("Effacer");
            add(Efface);
            Efface.addActionListener(this);
            setVisible(true);
        }
     
    }
    et la classe suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    import javax.swing.*;
    import java.awt.*;
    import java.awt.Graphics;
     
     
     
    public class ZoneDessin  extends JPanel{
     
     
     
           Color couleur;
           String forme="triangle";
     
     
          public Color getLacouleur()
         {
            return this.couleur;
         }
           public String getLaforme()
         {
            return this.forme;
         }
     
          public void setLacouleur(Color lacouleur)
         {
           this.couleur=lacouleur;
         }
          public void setLaforme(String laforme)
         {
           this.forme=laforme;
          } 
     
     
        public ZoneDessin() 
        {
            super();
            setBackground(Color.YELLOW);
            setSize(300,300);
            setVisible(true);
        }
     
      public void paintComponent(Graphics g)
      {
          g.setColor(this.getLacouleur());
          g.drawString(this.getLaforme(),100,100);
      }
     
      /*  public void efface(Graphics g)
        {
        g.clearRect(300,300,200,200);
        }*/
     
    }
    J'ai un peu la honte de demander votre aide sur des choses si banales mais rien ne s'affiche!!!

  4. #4
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Ah oui ! j'avais pas fait attention, mais dans la classe BoiteOutils, lors de l'ajout des composants, tu n'utilises pas le layout.

    Le layout par défaut est un BorderLayout, et si tu appelles add(machin), puis add(truc), truc prend la place de machin. Donc c'est normal que tu ne voies rien (surtout que tu as oublié d'ajouter la zone de dessin).
    Essaie de les ajouter comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    public BoiteOutils() {
      super();
      ...
      add(this.mf, BorderLayout.EAST);
      ...
      add(this.mc, BorderLayout.WEST);
      ...
      JPanel p = new JPanel(new FlowLayout());
      p.add(Ok);
      p.add(Efface);
      add(p, BorderLayout.SOUTH);
      ...
      add(zd, BorderLayout.CENTER);
      ...
    }
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  5. #5
    Membre confirmé Avatar de cybercrisp
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Par défaut
    salut, c'est encore moi! donc voila toujours le meme probleme(je vais tout mettre sauf les listes)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    package dessin;
    import javax.swing.*; 
    import java.awt.*;
    import javax.swing.BoxLayout;
     
    import java.awt.event.*;
     
     
    public class Main extends JFrame {
     
     
     
          public Main()
        {
            super();
            BorderLayout bl=new BorderLayout();
            setLayout(bl);
            ZoneDessin  zd=new ZoneDessin();
            BoiteOutils bo=new BoiteOutils();
            getContentPane().add(bo, BorderLayout.NORTH);
            getContentPane().add(zd, BorderLayout.CENTER);
        }
     
     
        public static void main(String[] args)
        {
         JFrame m=new Main();
         m.setSize(800,600);
         m.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         m.setVisible(true);
        }
     
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
     
     
    package dessin;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
     
     
     
    public class BoiteOutils extends JPanel implements ActionListener,ItemListener  {
     
        private String laforme;
        private Color lacouleur;
     
        JButton Ok=new JButton("OK");
        JButton  Efface=new JButton("Effacer");
        malisteForme mf=new malisteForme();
        malisteCouleur mc=new malisteCouleur();
        ZoneDessin zd=new ZoneDessin();
     
         public Color getLacouleur()
        {
          return this.lacouleur;
        }
         public void setLacouleur(Color lacouleur)
         {
         this.lacouleur=lacouleur;
         } 
     
         public String getLaforme()
        {
         return this.laforme;
        }
         public void setLaforme(String laforme)
        {
         this.laforme=laforme;
        }
     
     
     
     
         public Color retourneCouleur(String couleur)
         {  
         Color ob=Color.WHITE;
         if(couleur.equals("Rouge"))
              ob=Color.RED;
         if(couleur.equals("Bleu"))
              ob=Color.BLUE;
         if(couleur.equals("Vert"))
              ob=Color.GREEN;
         if(couleur.equals("Jaune"))
              ob=Color.YELLOW;
         if(couleur.equals("Noir"))
              ob=Color.BLACK;
         return ob;
         }
     
     
          public void itemStateChanged(ItemEvent e)
         {
          Object obj=e.getSource();
          if(obj==mf)
          {
          this.setLaforme(mf.getSelectedItem());
          zd.setLaforme(this.getLaforme());
          }
          if(obj==mc)
          {
           this.setLacouleur(retourneCouleur(mc.getSelectedItem()));
           zd.setLacouleur(this.getLacouleur());
          }  
          }
     
     
          public void actionPerformed(ActionEvent e){
     
           Object obj=e.getSource();
           if(obj==Ok)
           {   
            zd.repaint();
           }
           if(obj==Efface)
           {
            System.out.println("efface");
           }
          }
     
     
          public BoiteOutils()
        {
            super();
            FlowLayout fl=new FlowLayout();
            setLayout(fl);
     
            mf.addItemListener(this);
            mc.addItemListener(this);
            Ok.addActionListener(this);
            Efface.addActionListener(this);
     
            add(mf);
            add(mc);
            add(Ok);
            add(Efface);
     
            setSize(800,45);
            setBackground(Color.BLACK);
            setVisible(true);
        }
     
    }
    et la derniere:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    package dessin;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.Graphics;
     
     
     
    public class ZoneDessin  extends JPanel{
     
        private Color lacouleur;
        private String laforme="abcd";
     
          public Color getLacouleur()
        {
          return this.lacouleur;
        }
         public void setLacouleur(Color lacouleur)
         {
         this.lacouleur=lacouleur;
         } 
     
         public String getLaforme()
        {
         return this.laforme;
        }
         public void setLaforme(String laforme)
        {
         this.laforme=laforme;
        }
     
     
        public ZoneDessin() 
        {
            super();
            setBackground(Color.YELLOW);
            setSize(800,600);
            setVisible(true);
        }
     
      public void paintComponent(Graphics g)
      {
          super.paintComponent(g);
          g.setColor(this.getLacouleur());
          g.drawString(this.getLaforme(),300,300);
     
      }
     
     
    }



    là, je comprends plus , merci de votre aide encore une fois de plus désolé...B

  6. #6
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Euh, je viens d'exécuter ton code (en remplaçant les listes par des JComboBox), et ça marche chez moi. Qu'est-ce qui ne va pas ?
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  7. #7
    Membre confirmé Avatar de cybercrisp
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Par défaut
    une fois que je choisis la forme carré,rectangle... ca ne l'affiche pas à l'ecran

  8. #8
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 913
    Billets dans le blog
    54
    Par défaut
    Deux petites erreurs dans ton code :
    - ce qui n'est pas trop grave : il manque un appel a repaint() dans setLacouleur() et dans setLaforme() dans la classe ZoneDessin histoire de demander un reaffichage une fois les valeurs modifiees.

    - Plus grave, dans ton code tu crees deux instance differentes de ZoneDessin (une dans Main et une dans BoiteOutils) et celle qui est affichee a l'ecran n'est pas liee a BoiteOutils d'ou le fait qu'aucune modification n'y est reportee.

    Et pour finir je te conseilles d'aller voir les conventions de nommage Java dans la
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  9. #9
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    Citation Envoyé par cybercrisp
    une fois que je choisis la forme carré,rectangle... ca ne l'affiche pas à l'ecran
    Ah ben ça c'est un peu normal, vu jamais tu ne lui dis de le faire !

    Pour faire ça, il faut ajouter du code dans paintComponent de la classe ZoneDessin. Je te conseille quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public void paintComponent(Graphics g) {
      super.paintComponent(g);
      g.setColor(this.getLacouleur());
      g.drawString(this.getLaforme(),300,300);
      
      if(this.getLaForme().equals("CARRE"))
        g.drawRect( ... );
    
      else if(this.getLaForme().equals("TRIANGLE"))
        g.drawPolygon( ... );
    
      else if ...
    }
    Je pense que c'est ce qui sera le plus facile à intégrer dans ton code.

    Il y a une autre solution, c'est de mettre directement des objets de type Color et Shape dans les JComboBox, et de spécifier des ListCellRenderer à ces dernières pour améliorer l'affichage. Ca permet de récupérer directement les objets voulus dans getSelectedItem();. Mais bon c'est pour quand ton code marchera.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  10. #10
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 913
    Billets dans le blog
    54
    Par défaut
    En fait c'est plus simple : dans son cas laForme est une simple chaine de texte (le "abcd" qui est affiche dans la zone de dessin). Et quand on fait des tests plus en avant (en mettant des chaines de texte bidon dans la combobox des formes et les chaines de texte qu'il faut dans la combobox des couleurs) on rend compte effectivement que jamais la valeur (ou la couleur) selectionnee ne s'affiche justement car il manipule deux zones de dessin distinctes.
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  11. #11
    Membre confirmé Avatar de cybercrisp
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Par défaut
    J'ai pris en compte vos remarques mais cela ne marche toujours pas, mais je vais reussir un jour Donc à l'execution du code, dans la classe ZoneDessin, je demande d'ecrire la couleur et la forme dans setLaCouleur et setLaForme correspondant aux choix selectionnés dans les JComboBox, cela marche parfaitement.Mais aprés appel à la methode repaint() dans ces fonctions aucun changement!couleur=rouge, et forme=abcd.Voici donc mon code que je ne conseille donc à personne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    package dessin;
    import javax.swing.*; 
    import java.awt.*;
     
     
    import java.awt.event.*;
     
     
    public class Main extends JFrame {
     
     
     
          public Main()
        {
            super();
            BoiteOutils bo=new BoiteOutils();
            getContentPane().add(bo);
       }
     
     
        public static void main(String[] args)
        {
         JFrame m=new Main();
         m.setSize(800,600);
         m.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
         m.setVisible(true);
        }
     
    }
    celui de la boite à outils:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
     
    package dessin;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
     
     
     
    public class BoiteOutils extends JPanel implements ActionListener,ItemListener  {
     
        private String laforme;
        private Color lacouleur;
     
     
        JButton Ok=new JButton("OK");
        JButton  Efface=new JButton("Effacer");
        malisteForme mf=new malisteForme();
        malisteCouleur mc=new malisteCouleur();
        ZoneDessin zd=new ZoneDessin();
     
         public Color getLacouleur()
        {
          return this.lacouleur;
        }
         public void setLacouleur(Color lacouleur)
         {
         this.lacouleur=lacouleur;
         } 
     
         public String getLaforme()
        {
         return this.laforme;
        }
         public void setLaforme(String laforme)
        {
         this.laforme=laforme;
        }
     
     
     
     
         public Color retourneCouleur(Object couleur)
         {  
         Color ob=null;
     
         if(couleur.equals("Rouge"))
              ob=Color.RED;
         if(couleur.equals("Bleu"))
              ob=Color.BLUE;
         if(couleur.equals("Vert"))
              ob=Color.GREEN;
         if(couleur.equals("Jaune"))
              ob=Color.YELLOW;
         if(couleur.equals("Noir"))
              ob=Color.BLACK;
         return ob;
         }
     
     
          public void itemStateChanged(ItemEvent e)
         {
          Object obj=e.getSource();
          if(obj==this.mf)
          {
          this.setLaforme((String)this.mf.getSelectedItem());
          zd.setLaforme(this.getLaforme());
          }
          if(obj==this.mc)
          {
           this.setLacouleur( retourneCouleur(this.mc.getSelectedItem()));
           zd.setLacouleur(this.getLacouleur());
          }  
          }
     
     
          public void actionPerformed(ActionEvent e){
     
           Object obj=e.getSource();
           if(obj==Ok)
           {   
            zd.repaint();
           }
           if(obj==Efface)
           {
            System.out.println("efface");
           }
          }
     
     
          public BoiteOutils()
        {
            super();
            BorderLayout bl=new BorderLayout();
            setLayout(bl);
     
            JPanel pan=new JPanel();
            ZoneDessin zd=new ZoneDessin(); 
     
     
            mf.addItemListener(this);
            mc.addItemListener(this);
            Ok.addActionListener(this);
            Efface.addActionListener(this);
            pan.add(mf);
            pan.add(mc);
            pan.add(Ok);
            pan.add(Efface);
            pan.setBackground(Color.BLACK);
            pan.setSize(800,45);
     
            add(pan, BorderLayout.NORTH);
            add(zd, BorderLayout.CENTER);
     
            setVisible(true);
        }
     
    }
    et celui de la zone de dessin:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    package dessin;
    import javax.swing.*;
    import java.awt.*;
    import java.awt.Graphics;
     
    public class ZoneDessin extends JPanel {
     
        private Color lacouleur=Color.RED;
        private String laforme="abcd";
     
          public Color getLacouleur()
        {
          return this.lacouleur;
        }
         public void setLacouleur(Color lacouleur)
         {
         this.lacouleur=lacouleur;
         System.out.println("la couleur:"+lacouleur);
         repaint();
         } 
     
         public String getLaforme()
        {
         return this.laforme;
        }
         public void setLaforme(String laforme)
        {
         this.laforme=laforme;
         System.out.println("la forme:"+laforme);
         repaint();
        }
     
      public void paintComponent(Graphics g)
      {
      super.paintComponent(g);
      g.setColor(this.getLacouleur());
      g.drawString(this.getLaforme(),100,100);    
      }
     
        public ZoneDessin() 
        {
            super();
            setBackground(Color.YELLOW);
            setSize(800,600);
            setVisible(true);
     
        }
     
     
     
     
    }


    Désolé pour tout, je cherche encore et encore...merci et bonne journée

  12. #12
    Membre Expert
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Par défaut
    En fait, c'est très simple à résoudre et assez tordu à expliquer.

    Pour que ça marche, il faut que tu effaces la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ZoneDessin zd = new ZoneDessin();
    dans le constructeur de BoiteOutils.

    Pourquoi ? Parce qu'en fait, tu as deux variables appelées zd : une variable qui est attribut de la classe BoiteOutils, et une variable locale à la fonction BoiteOutils(). La variable affichée dans le JPanel est la variable locale, alors que la variable controlée par les JComboBox est l'attribut.

    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class Exemple {
      private int nombre = 4;
      public void fonction() {
        int nombre = 5; // il y a 2 variables qui s'appellent "nombre"
        System.out.println(nombre); // affiche 5
        System.out.println(this.nombre); // affiche 4
      }
    }
    On s'en sert souvent dans les constructeurs, pour éviter de compliquer les noms de variables :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class MaClasse {
      private int maVariable;
      public MaClasse(int maVariable) {
        this.maVariable = maVariable;
        // inutile de trouver des noms différents pour
        // l'attribut et le paramètre du constructeur !!
      }
    }
    J'ai été clair ?
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  13. #13
    Membre confirmé Avatar de cybercrisp
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Par défaut
    oui tu m'as trés bien expliqué(la classe!), et je vais donc revenir sur les bases java. .merci pour tout encore.Bonne soirée

  14. #14
    Membre confirmé Avatar de cybercrisp
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 104
    Par défaut
    super ca marche et j'ai bien compris quel etait le probléme, merci pour tout!!!

  15. #15
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 913
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 913
    Billets dans le blog
    54
    Par défaut
    Ce n'est pas faute de l'avoir dit qu'il y avait deux zones de dessins
    Ne t'inquietes pas on est tous passes par ce genres d'erreurs (pas forcement qu'en Java d'ailleurs).
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme paint() repaint()
    Par Uren dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 27/07/2007, 19h02
  2. [FLASH 8] Probleme méthode send de LoadVars
    Par dom_dev dans le forum Flash
    Réponses: 11
    Dernier message: 26/09/2006, 13h07
  3. Réponses: 2
    Dernier message: 23/08/2006, 16h47
  4. probleme methode="post"
    Par ardamus dans le forum Langage
    Réponses: 8
    Dernier message: 01/03/2006, 12h30
  5. Probleme Methode POST
    Par pidu dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 06/02/2006, 18h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo