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 :

MouseListener de cercles


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 187
    Par défaut MouseListener de cercles
    Bonjour,
    j'ai une classe qui est un JPanel Javabean représentant un cercle.
    Une autre classe (tableau) également un JPanel Javabean contient un tableau de 9cercles.
    Et pour finir une classe (fenetre) qui affiche le jpanel tableau.

    Voici les codes de la classe Cercle et la classe Tableau:
    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
     
    public class Cercle extends JPanel implements Serializable {
     
        private Color couleur1;
        private Color couleur2;
        private boolean peintRouge;
     
        public Cercle(){
            couleur1=Color.RED;
            couleur2=Color.LIGHT_GRAY;
            peintRouge=false;
            this.setPreferredSize(new Dimension(25,25));        
        }   
     
        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);
            g.setColor(Color.BLACK);
            g.drawOval(0,0,20,20);
            if(peintRouge)
                g.setColor(couleur1);
            else
                g.setColor(couleur2);
            g.fillOval(0,0,20,20);
        }
     
        // + tous les getteurs et setteurs
    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
     
    public class Tableau extends JPanel implements Serializable {
     
        private Cercle[][] tab;
        private int nbLignes;
        private int nbColonnes;
        private Color colorEtat;
     
        public Tableau(){
            nbLignes=3;
            nbColonnes=3;
            tab = new Cercle [nbLignes][nbColonnes];
            for (int i=0 ; i<nbLignes ; i++ )
                for(int j=0 ; j<nbColonnes ; j++ ){
                    tab[i][j]=new Cercle();  
                    MouseListener clicLed = new MouseListener() {
     
                        public void mouseClicked(MouseEvent e) {
                            tab[0][0].setPeintRouge(true);
                        }
                        public void mousePressed(MouseEvent e) {}
                        public void mouseReleased(MouseEvent e) {}
                        public void mouseEntered(MouseEvent e) {}
                        public void mouseExited(MouseEvent e) {}
                    };
                    tab[0][0].addMouseListener(clicLed);
                }
     
            for (int i=0 ; i<nbLignes ; i++ )
                for(int j=0 ; j<nbColonnes ; j++ )
                    add(tab[i][j]);                
     
            setLayout(new GridLayout(nbLignes,nbColonnes));         
     
        }
        // + getteurs et setteurs
    Ce que je voudrais c'est que quand je clique sur le premier cercle --> positions 0,0, il prenne la couleur rouge --> il passe de l'état LIGHT_GRIS l'état peintRouge (donc RED).

    Quand ma fenêtre s'ouvre, et que je clique sur le premier cercle, il garde sa couleur grise mais si à ce moment là je réduit ma fenêtre (elle va dans la barre des tâches et que je l'agrandis à nouveau, alors le cercle est peint en rouge!

    Savez vous m'aider?

    Merci d'avance.

  2. #2
    Membre Expert Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Par défaut
    Essaie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public class Cercle extends JPanel implements Serializable {
     
        public void setPeintRouge(boolean peintRouge) {
           this.peintRouge = peintRouge;
           repaint();
        }

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 187
    Par défaut
    Parfait pour ça, ça fonctionne maintenant!

    Mais j'ai un autre problème un peu du même genre: dans ma classe Fenetre, j'ai un menu qui me permet de choisir une couleur (avec un JColorChooser).
    Celle couleur choisie doit remplacer ma "couleur1" de la classe Cercle (donc la couleur rouge sera remplacée par la couleur choisir). Le JColorChooser fonctionne correctement, mais quand je clique sur mes cercles pour les peindre (peintRouge=true), la couleur reste toujours rouge et ne change pas... Savez vous d'où cela peut venir?

    Voici une partie de code de la classe Fenetre:
    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
     
    public class Fenetre extends JFrame{
     
          public Fenetre{
             .......
             couleurM=new JMenuItem("Couleurs");
             options.add(couleurM);
             couleurM.addActionListener(new ActionListener(){
                    public void actionPerformed(ActionEvent e) {
                        choixCouleur();
                        }}); 
             ........
          }
     
          private void choixCouleur(){
            couleurChoisie=JColorChooser.showDialog(this,"Choisissez une couleur",
                                                                    Color.RED);
     
                leTableau.setColorEtat(couleurChoisie);
     
        }
     
    }
    Et j'ai rajouté, juste avant le MouseListener dans ma classe Tableau la ligne suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tab[i][j].setCouleur1(colorEtat);
    Merci d'avance!

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2008
    Messages
    187
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 187
    Par défaut
    Réglé, il fallait reparcourir tout le tableau et mettre chaque fois à jour.

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

Discussions similaires

  1. Dessiner un cercle
    Par delire8 dans le forum DirectX
    Réponses: 7
    Dernier message: 26/07/2003, 12h11
  2. Lignes, cercles
    Par Francky033 dans le forum DirectX
    Réponses: 1
    Dernier message: 13/07/2003, 22h18
  3. [VB6] [Graphisme] Tracer un cercle avec pset
    Par bleuerouge dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 09/12/2002, 17h12
  4. [VB6] [Graphisme] Arc de cercle dans un picturebox
    Par SpaceFrog dans le forum VB 6 et antérieur
    Réponses: 11
    Dernier message: 04/11/2002, 17h55
  5. savoir si 1 point est a l'intérieur d'un cercle ...
    Par skarladevobsy dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 23/05/2002, 18h14

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