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 :

Un tableau de JButton


Sujet :

AWT/Swing Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut Un tableau de JButton
    Bonjour,

    Je voudrais inclure dans une fenêtre un tableau de JButtons qui, lors de l"action Event" rendra visible l'instance correspondante de la classe "Transfo" (qui est une classe ouvrant une fenêtre permettant d'effectuer une série de réglages).

    Voici mon code :
    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
     
    int nT = 4;
    Transfo TransfoDP[] = new Transfo[nT];
    JButton appelT[] = new JButton[nT];
     
    for (i=1; i<=nT; i++){
     
    appelT[i] = new JButton();
    appelT[i].setText ("Transformation" + i);
    bHor.add(appelT[i]); 
    /*bHor est le gestionnaire des composants*/
     
    appelT[i].addActionListener(this); 
    TransfoDP[i] = new Transfo();
    TransfoDP[i].setTitle ("T " + i);
    TransfoDP[i].setVisible(true);
    }
    Les instances de Transfo sont bien crées, mais pas les boutons. Une exeption à la ligne appelT[i] = new JButton() empêche le tout de fonctionner.
    Je manque de doc sur les tableaux sans doute. Qu'ai-je oublié?

  2. #2
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Par défaut
    Tu peux mettre l erreur?

    Merci

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    Salut effectivement tu as une erreur dans ton code,
    en faisant ca :
    JButton appelT[] = new JButton[nT];
    tu crées un tableau de nT lignes, qui peuvent etre indexé de 0 à Nt-1
    or dans ta boucle, tu va de 1 à nT, donc tu dois avoir une execption comme quoi l'index est trop élevé...
    donc il faut que tu modifie ta boucle... pour aller de 1 = 0; i < nT.
    j'espere que cela t'aura aider et que tu as compris.

  4. #4
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Par défaut
    En plus simple :

    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
     
     
    import javax.swing.JButton;
    import javax.swing.JFrame;
    import javax.swing.JPanel;
     
     
    /**
     * TODO: Description of the class.
     * 
     * @author fh
     * 
     * @since TODO: version number
     * 
     */
    public class ButtonTest extends JFrame {
     
        private JPanel panel = new JPanel();
     
        public ButtonTest() {
            creerButton();
            this.setSize(300, 200);
            this.getContentPane().add(panel);
            this.setVisible(true);
        }
     
        /**
         * 
         */
        private void creerButton() {
            int nT = 4;
     
            JButton appelT[] = new JButton[nT];
     
            for (int i = 0; i < nT; i++) {
     
                appelT[i] = new JButton();
                appelT[i].setText("Transformation" + i);
                panel.add(appelT[i]);
            }
     
        }
    }

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut
    Merci à tous, j'essaie cela bien vite.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut
    Merci, c'était bien cela. Par contre, mon écouteur ne marche pas. Je manque je pense de doc sur les tableaux : mon bouquin ne me parle que de int[] ou de double []...

    J'ai fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    public void actionPerformed (ActionEvent ev) {
     
            if (ev.getSource() == appelT[i]) { 
            TransfoDP[i].setVisible(true);
            }
    Boaf, pas terrible!!! Une belle liste d'exeptions dans la console au sujet de ev.getSource()==appelT([i];

    Que puis-je lire à ce sujet de plus complet? Faut-il introduire un "for...each"?

    Merci en tous les cas pour les premières réponses.

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut
    En fait, dans la méthode actionEvent, c'est la variable i qui ne semble pas reconnue. J'ai essayé "return i" pour voir, il ne le rendait pas.

    Comment dit-on "tableau" en anglais (pas tableur...). J'ai essayé de consulter la doc sur les classes array, class<T>, etc., je ne crois pas que ce soit ce que je cherche. Je n'ai pas trouvé non plus sur developpez.com, mais pourtant il y a certainement quelque chose.

  8. #8
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    504
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 504
    Par défaut
    salut, c'est normal que i n'est pas connu, c'etait une variable que tu avais déclaré temporairement int i dans ta boucle for lors de la création....
    de plus tu ne pourras jamais testé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ev.getSource() == appelT[i]
    car ev.getSource() renvoi un objet et appelT[i] un JButton, donc tu dois faire un cast
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ev.getSource() == (JButton)appelT[i]
    ensuite tu ne peux pas écrire i, car il est indéfinie, donc il te faut un moyen pour connaitre quelle instance de ton tableau de boutton a été cliqué.
    en général moi ce que je fais (je ne sais pas si c'est la meilleur solution), c'est que quand je crée mes boutons, je leur affecte un nom qui correspond à leur index :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for (int i = 0; i < nT; i++) {
     
                appelT[i] = new JButton();
                appelT[i].setText("Transformation" + i);
                appelT[i].setName(""+ i);
                panel.add(appelT[i]);
            }
    et ensuite tu n'a plus qu'a récupéré ton 'i' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public void actionPerformed (ActionEvent ev) {
            Object o = ev.getSource()
            if (o instanceof JButton) { 
                    JButton button = (JButton) o;
                    int i = Integer.parseInt(button.getName())
                    TransfoDP[i].setVisible(true);
            }
    }

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut
    Merci beaucoup, lilou77 pour ta réponse. Effectivement, grâce à ton aide, je récupère maintenant la valeur de i. Je l'Pour l'instant,
    TransfoDP[i].setVisible(true);
    ne marche pas encore. Je cherche du côté des JPane intégrées, mais cela ne devrait rien changer. Apparament, dans le void actionEvent, la classe Transfo[] est "oubliée"...

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut
    Merci beaucoup, lilou77 pour ta réponse. Effectivement, grâce à ton aide, je récupère maintenant la valeur de i. Je l'ai testée avec un
    System.out.println (i); et (i*2) : c'est bien un int.
    Pour l'instant,
    TransfoDP[i].setVisible(true);
    ne marche pas encore. Je cherche du côté des JPane intégrées, mais cela ne devrait rien changer. Apparament, dans le void actionEvent, la classe Transfo[] est "oubliée"...

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    171
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2007
    Messages : 171
    Par défaut
    Après avoir réfléchi au blème, je vais revoir l'architecture du soft, et créer une classe "Valeurs" où stocker les valeurs générées par les tableaux. Comme cela, je n'aurai qu'à ouvrir une seule instance de Transfo qui balancera ses valeurs dans la classe dédiée. Merci à ceux qui m'ont aidé dans cette discussion, lilou77 et LAnkou : ce que vous m'avez appris me servira sans nul doute pour la suite du développement de mon projet.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 20/03/2013, 09h38
  2. Affichages d'images dans un tableau de JButton
    Par Ktalyst dans le forum Interfaces Graphiques en Java
    Réponses: 29
    Dernier message: 06/01/2012, 21h38
  3. tableau 2 dimension de JButton
    Par zlatan40 dans le forum Composants
    Réponses: 2
    Dernier message: 04/10/2009, 18h01
  4. transmision de tableau en parametre
    Par Horus dans le forum C++Builder
    Réponses: 3
    Dernier message: 16/05/2002, 11h15
  5. Réponses: 4
    Dernier message: 13/05/2002, 16h43

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