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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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.

+ 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, 18h02
  2. [FLASH 8] Probleme méthode send de LoadVars
    Par dom_dev dans le forum Flash
    Réponses: 11
    Dernier message: 26/09/2006, 12h07
  3. Réponses: 2
    Dernier message: 23/08/2006, 15h47
  4. probleme methode="post"
    Par ardamus dans le forum Langage
    Réponses: 8
    Dernier message: 01/03/2006, 11h30
  5. Probleme Methode POST
    Par pidu dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 06/02/2006, 17h33

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