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 :

mouseEntered et héritage de JPanel


Sujet :

AWT/Swing Java

  1. #1
    skurty
    Invité(e)
    Par défaut mouseEntered et héritage de JPanel
    Bonjour,

    je suis en train de réaliser un petit exercice ou j'ai une grille (réalisée avec GridLayout) de 10x10 cases et lorsque je passe sur chacune d'elle, je dois afficher leur coordonnées.

    Pour celai j'ai créé un GridLayout avec 10x10 JPanels à l'intérieur. Cela fonctionne mais je ne peux pas vraiment connaitre leur coordonnées au passage de la souris.

    J'ai donc créé une petite classe héritant de JPanel avec les coordonnées en attributs.

    Voici la classe :

    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
    package ex;
     
    import javax.swing.JPanel;
     
    /**
     * Classe représentant un JPanel avec 2 paramètres en plus : les coordonnées correspondant à la position du JPanel dans le damier
     * @author aurelien
     */
    public class CheckerboardCase extends JPanel {
     
        private int cx, cy;
     
        public CheckerboardCase(int cx, int cy) {
            this.cx = cx;
            this.cy = cy;
        }
     
     
        public int getCx() {
            return this.cx;
        }
     
     
        public int getCy() {
            return this.cy;
        }
    }
    Je n'ai pas mis x et y parce que JPanel a déjà ces attributs donc faire des getters par dessus fausse tout.

    Et voici le programme principal :

    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
    package ex;
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.GridLayout;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseListener;
    import javax.swing.BorderFactory;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.WindowConstants;
     
    public class Window extends JFrame implements MouseListener {
     
        int cbWidth = 10, cbHeight = 10;        // Tailles par défaut de la grille
        JPanel pCheckerboard = new JPanel();
     
        JLabel lbl1 = new JLabel("Case survolée : ");
        JLabel lInfos = new JLabel("aucune");
     
        public Window4() {
            super("Ma fenêtre");
     
            /*
             * Création de la grille
             */
            this.pCheckerboard.setLayout(new GridLayout(this.cbWidth, this.cbHeight));
     
            for (int i = 0; i < this.cbWidth; i++) {
                for (int j = 0; j < this.cbHeight; j++) {
                    CheckerboardCase cbCase = new CheckerboardCase(i, j);
     
                    cbCase.setBorder(BorderFactory.createLineBorder(Color.black));
     
                    cbCase.addMouseListener(this);
     
                    this.pCheckerboard.add(cbCase);
                }
            }
     
            /*
             * Informations sur la case survolée
             */
            this.lInfos.setToolTipText("Coordonnées de la case survolée");
            JPanel pInfos = new JPanel();
     
            pInfos.add(this.lbl1);
            pInfos.add(this.lInfos);
     
            this.add(pCheckerboard, BorderLayout.CENTER);
            this.add(pInfos, BorderLayout.SOUTH);
     
            this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
     
            this.setVisible(true);
        }
     
     
        public void mouseEntered(MouseEvent me) {
     
            // récupération des coordonnées de la case survolée + affichage
            int x = ...;
            int y = ...;
     
            this.lInfos.setText("[" + Integer.toString(x) + ", " + Integer.toString(y) + "]");
            this.lbl1.setVisible(true);
            this.lInfos.setVisible(true);
        }
     
        public void mouseExited(MouseEvent me) {
            this.lbl1.setVisible(false);
            this.lInfos.setVisible(false);
        }
     
        public void mouseClicked(MouseEvent me) {}
     
        public void mousePressed(MouseEvent me) {}
     
        public void mouseReleased(MouseEvent me) {}
     
        public static void main(String[] args) {
            Window window = new Window();
        }
    }
    Le problème se trouve au niveau de la fonction mouseEntered() où je souhaite récupérer les coordonnées de la case avec les méthodes de la classe que j'ai écrite : getCx() et getCy().
    En faisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.getComponent().getClass().getName();
    j'arrive à récupérer le nom de ma classe mais si je fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    me.getComponent().getClass().getCx();
    par exemple, il me dit :

    cannot find symbol
    symbol: method getCx()
    location: class java.lang.Class<<capture#1 of ? extends java.awt.Component>
    J'ai essayé de regarder les différentes méthodes proposées à partir de MouseEvent et de me.getComponents() mais je ne comprends pas comment accéder aux méthodes de ma classe.

    Merci d'avance

  2. #2
    Membre expérimenté Avatar de DarkMolo
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    207
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Maroc

    Informations forums :
    Inscription : Juillet 2006
    Messages : 207
    Par défaut
    Salut,

    Je t'invite à voir ce qui est dit sur les listener chez la FAQ.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //Ce n'est pas ça !
    //me.getComponent().getClass().getCx();
     
    //Plutôt
    CheckerboardCase cbc = (CheckerboardCase) me.getSource();
    //Et là prends plaisir à utiliser tes méthodes...
    A+,

  3. #3
    skurty
    Invité(e)
    Par défaut
    Merci beaucoup pour ton code qui fonctionne super bien

    Je vais voir plus en détails toutes les possibilités de listener.

    Encore merci pour ton aide.

Discussions similaires

  1. Problème lors de l'héritage d'un objet JPanel
    Par guk92 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 28/10/2011, 11h54
  2. Utiliser un héritage de JPanel en mode Design
    Par bulldozer27350 dans le forum NetBeans
    Réponses: 1
    Dernier message: 09/02/2010, 10h27
  3. Héritage et taille de JPanel
    Par Nieli dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 18/11/2009, 19h59
  4. [Postgres] Héritage + Clés
    Par k-reen dans le forum PostgreSQL
    Réponses: 6
    Dernier message: 21/05/2003, 16h37
  5. Héritage entre Forms
    Par BarBal dans le forum Composants VCL
    Réponses: 7
    Dernier message: 29/08/2002, 17h44

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