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 :

Tableau de boutons


Sujet :

AWT/Swing Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 21
    Par défaut Tableau de boutons
    Bonjour, je débute en java et je suis en train de faire un mini-jeu, mais j'ai un petit problème (désolé si je ne suis pas dans la bonne partie mais je suis un peu perdu sur ce forum).
    Je cherche a faire des boutons cliquables afin d'éviter de devoir taper les commandes sans arrêt (c'est un jeu "pièce par pièce), mais les images de mes boutons se retrouvent les unes sur les autres évidemment. Je cherche donc à en faire un "tableau" pour pouvoir les ranger comme je veux, mais après beaucoup de recherches et plusieurs solutions trouvées je n'arrive toujours pas à les intégrer à mon projet.
    Pouvez vous le donner le lien d'un bon tuto ou me donner des pistes directement svp?

    merci d'avance

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 46
    Par défaut
    Juste un indice:

    Pour créer un tableau de boutons:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int nb_button = 10; // Nombre de boutons
     
    // On créer le tableau de boutons
    // /!\ Atention /!\ : Chaque bouton du tableau n'est pas instancié ( = null)
    JButton []tabButton = new JButton[nb_button];
     
    // On instancie chaque boutons du tableau de boutons
    for (int i = 0; i < nb_button; i++)
    	tabButton[i] = new JButton();
    Après je ne suis pas sur d'avoir bien compris ce que tu désire faire.. :S

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 21
    Par défaut
    Je m'explique mieux:
    je veux pour mettre les boutons où je veux dans ma page, donc passer par un tableau et le placer, enfin il y a peut être plus simple, comme donner une taille et des coordonnées à chaque bouton, mais je n'ai pas trouvé comment faire

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 46
    Par défaut
    Aurais-tu une portion de ton code? une ébauche?
    Car si j'ai bien compris, tu voudrais placer des boutons dans une fenetre (JFrame). Si c'est le cas, utilise un gestionnaire d'agencement (Layout Manager) du style :
    • FlowLayout() : Ajoute les composant l'un apres l'autre
    • GridLayout(rows,cols) : Creer une grille uniforme de rows ligne et cols colonnes
    • etc..


    Puis ajoute tes boutons au composant: méthode add(Component c)

    Donc si je comprend bien ce que tu veux faire, cela reviendrais a ajoute rles ignes de codes suivante dans ta frame:
    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
     
    // Agencement sous forme de tableau uniforme de 10 lignes/colonnes
    setLayout(new GridLayout(10,10);
     
    // On créer et instancie les boutons (cf post du dessus)
    JButton []tabButton = new JButton[nb_button];
     
    // On instancie chaque boutons du tableau de boutons et on l'ajoute
    //   au gestionnaire d'agencement
    for (int i = 0; i < nb_button; i++) {
    	tabButton[i] = new JButton();
     
    	// Ajout d'un écouteur sur le bouton
    	tabButton[i].addActionListener(this);
     
    	// Ajout du bouton
    	add(tabButton[i]);
    }
    Un petit tour sur la FAQ JAVA de développez ou la JAVADOC t'expliquera plus en détail

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 21
    Par défaut
    oui ça ressemble plus à ce que je veux merci, je te donne une ébauche dès que je peux mais le jeu n'est pas sur cet ordi (la connection de l'autre plante et je n'ai pas pensé à le mettre sur une clé)

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 21
    Par défaut
    bon je ne m'en sort pas, j'ai beau tenter je n'arrive jamais à compiler ou, quand j'y arrive, les boutons ne s'affichent pas, c'est là première fois que je bloque comme ça

    Je vous donne le code de ma classe avant que j'y foute le bordel avec mes boutons on ne sait jamais:
    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
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.net.URL;
    import java.awt.image.*;
     
    public class UserInterface implements ActionListener
    {
        private GameEngine engine;
        private JFrame myFrame;
        private JTextField entryField;
        private JTextArea log;
        private JLabel image;
     
     
        public UserInterface(GameEngine gameEngine)
        {
            engine = gameEngine;
            createGUI();
        }
     
        public void print(String text)
        {
            log.append(text);
            log.setCaretPosition(log.getDocument().getLength());
        }
     
        public void println(String text)
        {
            log.append(text + "\n");
            log.setCaretPosition(log.getDocument().getLength());
        }
     
        public void showImage(String imageName)
        {
            URL imageURL = this.getClass().getClassLoader().getResource(imageName);
            if(imageURL == null)
                System.out.println("image not found");
            else {
                ImageIcon icon = new ImageIcon(imageURL);
                image.setIcon(icon);
                myFrame.pack();
            }
        }
     
        public void enable(boolean on)
        {
            entryField.setEditable(on);
            if(!on)
                entryField.getCaret().setBlinkRate(0);
        }
     
        private void createGUI()
        {
            myFrame = new JFrame("13 minutes Chronos!");
            entryField = new JTextField(100);
     
            log = new JTextArea();
            log.setEditable(false);
            JScrollPane listScroller = new JScrollPane(log);
            listScroller.setPreferredSize(new Dimension(500, 300));
            listScroller.setMinimumSize(new Dimension(300,300));
     
            JPanel panel = new JPanel();
            image = new JLabel();
     
            panel.setLayout(new BorderLayout());
            panel.add(image, BorderLayout.NORTH);
            panel.add(listScroller, BorderLayout.CENTER);
            panel.add(entryField, BorderLayout.SOUTH);
     
            myFrame.getContentPane().add(panel, BorderLayout.CENTER);
     
            // add some event listeners to some components
            myFrame.addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {System.exit(0);}
            });
     
            entryField.addActionListener(this);
     
            myFrame.pack();
            myFrame.setVisible(true);
            entryField.requestFocus();
        }
     
        public void actionPerformed(ActionEvent e) 
        {
            // no need to check the type of action at the moment.
            // there is only one possible action: text entry
            processCommand();
        }
     
        private void processCommand()
        {
            boolean finished = false;
            String input = entryField.getText();
            entryField.setText("");
     
            engine.interpretCommand(input);
        }
     
    }

  7. #7
    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
    Sans "GameEngine" c'est pas très clair pour voir ce que tu veux faire.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 21
    Par défaut
    bon j'ai finalement réussit à mettre les boutons comme je le voulais et y insérer les commandes adaptées.
    J'ai un dernier petit problème pour que tout fonctionne: j'avais avant de faire ces boutons cette méthode pour faire l'action écrite dans ma zone de texte:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        public void actionPerformed(ActionEvent e) 
        {    processCommand();
        }
    Pour faire l'action des boutons j'ai du rajouter ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
        public void actionPerformed(ActionEvent e) 
        {    processCommand();
             JButton clicked = (JButton) e.getSource();
       String textButton = clicked.getText();
       if (textButton == "nord" || textButton == "sud" || textButton== "ouest" || textButton == "est") engine.interpretCommand("aller " + textButton);
        else engine.interpretCommand(textButton);
     
        }
    Mais là bien sur il y a un problème: pour l'instant il fait d'abord le "processCommand()", et donc me met
    "commande inconnue" vu qu'il n'y a rien d'écrit et ensuite fait l'action
    du bouton.

    J'ai essayé d'arranger ça avec un "if" mais je ne trouve pas quoi mettre
    comme condition pour qu'il fasse ce que je lui demande sans message
    d'erreur...

    Pouvez vous me proposer une solution svp?

    Merci d'avance

  9. #9
    Membre éprouvé
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 83
    Par défaut
    Bonjour,

    == : pas bien
    .equals : bien

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if ("nord".equals(textButton)
     || "sud".equals(textButton)
     || "ouest".equals(textButton)
     || "est".equals(textButton))
     
     engine.interpretCommand("aller " + textButton);
    else 
     engine.interpretCommand(textButton);
    Sa sera peut être meiux ...
    A++

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 21
    Par défaut
    oui c'est vrai que c'est du meilleur code, merci de me le faire remarquer, mais je ne vois pas en quoi ça arrange mon problème

    Je l'explique différemment même si c'est encore moins compréhensible:

    Ce que je veux faire c'est de mettre juste processCommand(); quand la
    commande est écrite par texte (car là il le fait puis tente de trouver un
    bouton cliqué qui n'existe pas et donc me met des erreurs) et si la
    commande est faite par clic qu'il oublie le "processCommand();" pour ne
    faire que le reste, sinon il commence par celui ci et je me retrouve avant
    l'action par un "commande inconnue".

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

Discussions similaires

  1. [ActionListener] Evénement sur tableau de boutons
    Par frouge dans le forum Composants
    Réponses: 5
    Dernier message: 08/10/2011, 02h44
  2. Tableau de boutons
    Par hbzied dans le forum AWT/Swing
    Réponses: 1
    Dernier message: 26/04/2006, 14h14
  3. Disposition d'un tableau de boutons dans un JPanel
    Par Arnaud F. dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 23/04/2006, 18h09
  4. [AWT]tableau de boutons
    Par pierrot106 dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 06/12/2004, 17h59
  5. Gérer les events d'un tableau de boutons
    Par lord_kalipsy dans le forum wxWidgets
    Réponses: 7
    Dernier message: 20/10/2004, 10h13

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