Demande pour Actions sur des boutons

cs_javalang Messages postés 18 Date d'inscription dimanche 29 mars 2009 Statut Membre Dernière intervention 15 août 2009 - 29 mars 2009 à 23:23
dmk04 Messages postés 206 Date d'inscription samedi 29 octobre 2005 Statut Membre Dernière intervention 7 mars 2012 - 4 avril 2009 à 00:20
Bonjour, les gars !
Quelqu'un pourrait-il m'aider? Je suis débutant en Java et je ne sais pas encore mettre de l'ordre dans mes codes.
Je vous donne mon code.  Quand je clique sur btnReady, huit lettres sont générées aléatoirement, mais je n'arrive pas à les affecter aux huit boutons.
En plus, je demande du code pour que lorsque je clique sur l'un des huit boutons, que la lettre inscrite sur le bouton soit affectée dans un JTextField de la grille.
Besoin d'aide en urgence pour ce travail de classe. Merci
Voici mon code

-DEBUT DU CODE=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;
import javax.swing.JButton;
import javax.swing.JPanel;

public class LettresBoutons extends JPanel {

    private GridBagLayout layout;
    private GridBagConstraints contraintes;
    private JButton btnReady;
    private ButtonHandler btnHandler;
    private final String CONSONNES = "bcdfghjklmnpqrstvwxz";
    private final String VOYELLES = "aeiouy";
    private final String AUTRES = "bacedifoguhyjakelimonupyqaresitovuwyxaz";

    public LettresBoutons() {
        layout = new GridBagLayout();
        setLayout(layout);
        contraintes = new GridBagConstraints();
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(2, 4));

        panel.setLayout(new GridLayout(2, 4));
        panel.add(new JButton(" "));
        panel.add(new JButton(" "));
        panel.add(new JButton(" "));
        panel.add(new JButton(" "));
        panel.add(new JButton(" "));
        panel.add(new JButton(" "));
        panel.add(new JButton(" "));
        panel.add(new JButton(" "));
        btnReady = new JButton("Ready ?");
        btnHandler = new ButtonHandler();
        btnReady.addActionListener((ActionListener) btnHandler);

        addComp(panel, 0, 0, 1, 1);
        addComp(btnReady, 1, 0, 4, 1);
    }

    private void JetLettres() {
        JPanel panel = new JPanel();
        panel.setLayout(new GridLayout(2, 4));

        final int nbL = 8;
        final int nbVoyelles = 3;
        final int nbConsonnes = 3;
        final int nbAutres = 2;

        ArrayList<String> lettres = new ArrayList<String>();

        Random random = new Random(System.currentTimeMillis());

        for (int i = 0; i < nbVoyelles; ++i) {
            char voyelle = VOYELLES.charAt(random.nextInt(VOYELLES.length()));
            lettres.add("" + voyelle);
        }
        for (int j = 0; j < nbConsonnes; ++j) {
            char consonnes = CONSONNES.charAt(random.nextInt(CONSONNES.length()));
            lettres.add("" + consonnes);
        }
        for (int k = 0; k < nbAutres; ++k) {
            char autre = AUTRES.charAt(random.nextInt(AUTRES.length()));
            lettres.add("" + autre);
        }
        Collections.shuffle(lettres);
        System.out.println(lettres);

        for (int m = 0; m < 8; ++m) {
            panel.add(new JButton(lettres.get(m)));
            // ============================================================
            // TOUT SE PASSE COMME JE VEUX JUSQU'A CE NIVEAU OU JE VOUDRAIS
            // AFFECTER UNE LETTRE A CHAQUE BOUTON.
            // MAIS JE NE M'EN SORS PAS.
            // ============================================================
        }

    }

    private void addComp(Component comp, int x, int y, int h, int w) {
        contraintes.gridx = y;
        contraintes.gridy = x;
        contraintes.gridwidth = h;
        contraintes.gridheight = w;
        layout.setConstraints(comp, contraintes);
        this.add(comp);
    }

    private class ButtonHandler implements ActionListener {

        public void actionPerformed(ActionEvent event) {
            if (event.getSource() == btnReady) {
                JetLettres();
            }
        }
    }
}

-FIN DU CODE=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

4 réponses

dmk04 Messages postés 206 Date d'inscription samedi 29 octobre 2005 Statut Membre Dernière intervention 7 mars 2012
2 avril 2009 à 16:46
Salut,

Si j'ai bien compris, tu as 8 boutons vides, et un bouton "Ready". Quand tu cliques sur "Ready" tu voudrais changer les "labels" de tes 8 boutons vides, et leurs affecter une lettre aléatoirement ?

Je pense que je mieux serait mettre un tableau de boutons dans les attributs de ta classe que tu initialisera dans ton constructeur.

Il te suffira ensuite de modifier les labels et actions des boutons là où tu voulais le faire :), sauf qu'au lieu d'ajouter des nouveaux boutons, tu modifies ceux qui ont dans le tableau créé précédemment.

A+
0
cs_javalang Messages postés 18 Date d'inscription dimanche 29 mars 2009 Statut Membre Dernière intervention 15 août 2009
2 avril 2009 à 17:15
Merci, je me mettrai à cela tout de suite.
0
dmk04 Messages postés 206 Date d'inscription samedi 29 octobre 2005 Statut Membre Dernière intervention 7 mars 2012
2 avril 2009 à 18:12
N'oublie pas de les ajouter dans ton panel comme tu l'as déjà fait :

...
    private JButton[] tabBtnRdm = new JButton[8]; // je me remets doucement au Java et je ne sais plus comment il faut allouer ça...
...

...
// tes 'panel.add(new JButton(" "));' sont à remplacer par quelque chose comme ça, encore une fois je ne garanti rien
for(int i=0; i<8; ++i)
{
   tabBtnRdm[i] = new JButton(" ");
   panel.add(tabBtnRdm[i]);
}
...
0
dmk04 Messages postés 206 Date d'inscription samedi 29 octobre 2005 Statut Membre Dernière intervention 7 mars 2012
4 avril 2009 à 00:20
Message de javalang :

Salut, DMK04 !
Je te remercie pour ton aide.
Avec le code ci-après, j'ai pu générer et placer les lettres sur les jbuttons.
Il me reste le transfert des lettres de chaque dans la gille (jtextfield).
==========
    private ArrayList<String> GenLettres() {
        final int nbVoyelles = 3;
        final int nbConsonnes = 3;
        final int nbAutres = 2;

        ArrayList<String> lettres = new ArrayList<String>();

        Random random = new Random(System.currentTimeMillis());

        for (int i = 0; i < nbVoyelles; ++i) {
            char voyelle = VOYELLES.charAt(random.nextInt(VOYELLES.length()));
            lettres.add("" + voyelle);
        }
        for (int j = 0; j < nbConsonnes; ++j) {
            char consonnes = CONSONNES.charAt(random.nextInt(CONSONNES.length()));
            lettres.add("" + consonnes);
        }
        for (int k = 0; k < nbAutres; ++k) {
            char autre = AUTRES.charAt(random.nextInt(AUTRES.length()));
            lettres.add("" + autre);
        }
        Collections.shuffle(lettres);
        System.out.println(lettres);
        
        return lettres;
    }
==========

Salut,

Pour le JTextField, il faut le déclarer en attribut de ta classe aussi, le rajotuer a ton interface graphique, et rajouter quelque chose comme ca dans ta methode buttonHandler :

public void actionPerformed(ActionEvent event) {
            if (event.getSource() == btnReady) {
                JetLettres();
            }
      for(int i=0; i<8; ++i){
              if (event.getSource() == tabBtnRdm[i]) {
               /* ici tu met a jour le texte de ton attribut */
               /* qqch comme ca, encore une fosi je ne garantit rien sur les noms des methodes, mais je pense que c'est suffisant pour que tu comprennes */
                  jtxtfld.setValue(jtxtfld.getValue()+tabBtnRdm[i].getLabel());
            }
        }

N'oublies pas dans ton constructeur de rajouter l'event listener sur tes boutons

...
for(int i=0; i<8; ++i)
{
   tabBtnRdm[i] = new JButton(" ");
   panel.add(tabBtnRdm[i]);
   tabBtnRdm[i].addActionListener((ActionListener) btnHandler);
}

...

A+
0
Rejoignez-nous