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 :

Récupération index JButton


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Par défaut Récupération index JButton
    Bonjour,

    J'aimerai récupérer l'index d'un JButton instancié dans une liste[][]
    Lorsque je clic dessus avec un ActionEvent j'obtiens (e.getsource()):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    javax.swing.JButton[,185,156,37x26,alignmentX=0.0,alignmentY=0.5,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@b07f45d,flags=296,maximumSize=,minimumSize=,preferredSize=,defaultIcon=,disabledIcon=,disabledSelectedIcon=,margin=javax.swing.plaf.InsetsUIResource[top=2,left=14,bottom=2,right=14],paintBorder=true,paintFocus=true,pressedIcon=,rolloverEnabled=true,rolloverIcon=,rolloverSelectedIcon=,selectedIcon=,text= ,defaultCapable=true]
    Je suppose qu'il y a un autre moyen de récupérer la donnée qui m'intéresse mais je ne vois pas lequel.

    Voici comment se déroule la création de mon 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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    public Tableau(String Mode){
     
    		JLabel ltemp;
    		tabAtt =  new JButton[10][10];
    		p.setLayout(new GridLayout(11,11));
    		int posx = 0;
    		int posy = 0;
    		Boolean jpeuxClic = false;
     
    		if(Mode.equals("Attaque")){
    			jpeuxClic = true;
    		}
     
    		for(int i = 0; i < 11; i++){
     
    			for(int j = 0; j < 11; j++){
     
    				posx = i - 1;
    				posy = j - 1;
     
    				if(i == 0){					
    					if(j == 0){
    						ltemp = new JLabel(getLettre(i));
    						ltemp.setHorizontalAlignment(JLabel.CENTER);						
    						p.add(ltemp);
    					}
    					else{
    						ltemp = new JLabel((j-1) + "");
    						ltemp.setHorizontalAlignment(JLabel.CENTER);
    						p.add(ltemp);
    					}					
    				}
    				else if(j == 0){
    					ltemp = new JLabel(getLettre(i));
    					ltemp.setHorizontalAlignment(JLabel.CENTER);						
    					p.add(ltemp);
    				}
    				else{
    					tabAtt[posx][posy] = new JButton(" ");
    					tabAtt[posx][posy].setBackground(Color.WHITE);
    					tabAtt[posx][posy].setEnabled(jpeuxClic);
    					tabAtt[posx][posy].addActionListener(this);
    					p.add(tabAtt[posx][posy]);
    				}
     
     
    			}
     
    		}
     
    	}
    Pour plus d'informations complémentaires, je vous invite à rejoindre le sujet principal de mon projet :

    http://www.developpez.net/forums/d11...x/#post6350313

  2. #2
    Membre très actif
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Par défaut
    Je ne comprends pas vraiment à quoi sert getX() et getY() du getSource() de l'ActionEvent.
    Mais ce sont des multiples de 37 et 26 respectivement dans mon cas.
    Quelqu'un peut m'éclairer pour ces données ?

    En attendant, je peux continuer mon programme en faisant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public void actionPerformed(ActionEvent e) {
     
                System.out.print(getLettre(((JButton) e.getSource()).getY() / 26));
                System.out.println(((JButton) e.getSource()).getX() / 37 - 1);
     
        }
    C'est moche, mais bon, j'ai pas le choix si je trouve pas autre chose pour m'aider à obtenir ce que je veux :/

  3. #3
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    C'est, comment dire, plutôt pas très propre comme façon de faire. Et ces valeurs pourraient bien changer selon le look&feel, la machine, la version de java et ainsi de suite...

    A la limite, pour une solution bourrine il te suffit de parcourrir le contenu de tabAtt et de comparer avec le retour du e.getSource (en utilisant l'opérateur =, en effet, getSource et un des boutons sont censés pointer vers la même référence, donc le même objet, d'où l'utilisation directe de l'opérateur =).

    Au moins tu seras sûr du résultat.

  4. #4
    Expert confirmé
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 660
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 660
    Par défaut
    bonjour,

    une solution sans doute plus élégante serait de créer ta classe Button dérivée de JButton :
    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
     
    public class MyButton extends JButton
    {
        private int index;
        public MyButton()
        {
            super();
        }
     
        public void setIndex(int index)
        {
            this.index = index;
        }
     
        public int getIndex()
        {
            return this.index;
        }
    }
    Cette classe te permettra de préciser un paramètre index à ton bouton.


    Puis au moment de la création :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    tabAtt[posx][posy] = new MyButton();
     
    tabAtt[posx][posy].setIndex(indexBouton); // index du bouton créé
     
    tabAtt[posx][posy].setBackground(Color.WHITE);
    tabAtt[posx][posy].setEnabled(jpeuxClic);
    tabAtt[posx][posy].addActionListener(this);
    p.add(tabAtt[posx][posy]);
    ensuite pour la gestion de l'événement récupère cet index pour savoir quel bouton a été actionné :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public void actionPerformed(ActionEvent e) 
    {
         System.out.println(((MyButton)e.getSource()).getIndex());
     
    }
    Et un switch() case te permettra de réaliser l'action voulue en fonction de l'index du bouton.

  5. #5
    Membre très actif
    Profil pro
    Développeur Java
    Inscrit en
    Octobre 2011
    Messages
    137
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Octobre 2011
    Messages : 137
    Par défaut
    Il est vrai que cette solution est vraiment propre.
    Il est normal que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    tabAtt[posx][posy] = new MonBouton();
    tabAtt[posx][posy]).setIndex(indexBouton);
    me sort qu'il faut définir un setIndex pour la classe JButton ?

    Du coup je suis obligé de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((MonBouton)tabAtt[posx][posy]).setIndex(indexBouton);
    Pourtant, j'ai bien initialisé le tableau de MonBouton ...

  6. #6
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bah, ouais, tu as défini tabbAtt comme un tableau de JButton, pas comme un tableau de MyButton. Donc il ne te propose que les méthodes de JButton. Donc pas de setIndex. CQFD.

Discussions similaires

  1. [SAPUI5] Récupération index ligne tableau
    Par fripou dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 18/03/2015, 12h35
  2. [JButton] récupération valeur bouton cliqué
    Par Adren dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 23/10/2006, 14h09
  3. [D5 + Access + DAO] Pb récupération champs d'index
    Par jleg dans le forum Bases de données
    Réponses: 1
    Dernier message: 14/02/2006, 13h20
  4. Récupération d'index dans DBLookupControl ?
    Par Michel D. dans le forum Bases de données
    Réponses: 4
    Dernier message: 02/06/2004, 15h01

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