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

Interfaces Graphiques en Java Discussion :

Création d'un JPanel à partir d'une actionlistener


Sujet :

Interfaces Graphiques en Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2013
    Messages : 8
    Par défaut Création d'un JPanel à partir d'une actionlistener
    Bonjour à tous,

    je souhaite développer une sorte de mastermind (jeu avec des couleurs que l'on doit deviner).

    Pour l'interface graphique, je voudrais que l'utilisateur ait le choix entre deux modes de jeu (automatique ou user contre ordi), qu'il fasse ce choix avec deux boutons et que, selon qu'il choisisse un mode ou un autre, que des boutons apparaissent, du texte, etc....

    Pour le moment, j'ai deux ennuis : je n'arrive pas à mettre en haut ma barre de choix, et je n'arrive pas à instancier, lorsque que je clique sur ordi vs ordi, un JLabel ou même un JButton...

    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
    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
     
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
     
    public class IGMasterMind extends JFrame {
        JRadioButton ovo = new JRadioButton("Ordi vs Ordi");
        JRadioButton hvo = new JRadioButton("Humain vs Ordi");
        ButtonGroup btchoix = new ButtonGroup();
        JLabel choixmode = new JLabel("Choix du mode de jeu : ");
     
        public IGMasterMind()
        {
            super("MasterMind");
            this.setResizable(false);
            this.setSize(800,600);
            this.setVisible(true);
            this.setDefaultCloseOperation(EXIT_ON_CLOSE);
     
            JPanel panel =(JPanel)getContentPane();
            GridBagLayout layout = new GridBagLayout();
            panel.setLayout(layout);
     
     
            GridBagConstraints c1 = new GridBagConstraints();
            JPanel choixjeu = new JPanel();
            btchoix.add(ovo); // n'avoir le choix de lancer qu'un seul des deux modes
            btchoix.add(hvo);
            choixjeu.add(choixmode);
            ovo.addActionListener(new ActionListener()
            {          
                @Override        
                public void actionPerformed(ActionEvent e)
                {
                    JLabel coucou = new JLabel("coucou");
                    JButton coul = new JButton("Générer couleur");
                    GridBagConstraints c2 = new GridBagConstraints();
                    JPanel pa = new JPanel();
                    pa.add(coucou);
                    pa.add(coul);
                    c2.gridx=1;
                    c2.gridy=1;
                    c2.weightx=100;
                    c2.weighty=100;
                    panel.add(pa,c2);
                }   
            });
     
            //hvo.addActionListener();
            choixjeu.add(ovo);
            choixjeu.add(hvo);
            c1.gridx=2;
            c1.gridy=0;
            c1.fill = GridBagConstraints.HORIZONTAL;
            c1.insets = new Insets(1,0,0,0);
            c1.weightx=0;
            c1.weighty=0;
            panel.add(choixjeu,c1);
     
     
     
     
        }
     
        public static void main (String [] args)
        {
            IGMasterMind m = new IGMasterMind();
     
        }
     
    }



    Merci d'avance, et bonne journée !

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    ton programme ne compile pas parce que tu essayes d'accèder à la variable panel dans la méthode actionPerformed et que cette variable est déclarée dans le constructeur de ta classe IGMasterMind. Une variable déclarée dans un scope ne peut pas être visible d'un autre scope.
    Comme ta méthode actionPerformed est une méthode d'une instance de classe anonyme créée dans le scope du constructeur de IGMasterMind, tu peux contourner ce problème en déclarant ta variable panel final, comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    final JPanel panel =(JPanel)getContentPane();
    Ensuite, quand ton actionListener s'exécute, il créé un nouveau JPanel (pa) qu'il place dans panel : il faut prévenir panel que son contenu à changé et qu'il doit réagir à ce changement pour que tu vois le nouveau panel, comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    panel.add(pa,c2);
    panel.revalidate();
    Tu verras ensuite que tu as d'autres problèmes de layout, mais je te laisse découvrir ça
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2013
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2013
    Messages : 8
    Par défaut
    Bonjour,

    merci pour la réponse !

    Cependant, comme vous me l'aviez prédit, il y a un beau décalage !

    Déjà, comment puis-je faire pour placer, dès le départ, le choix du type de jeu en haut de ma fenêtre ? J'ai essayé hier tout l'après midi, mais je ne comprends vraiment pas GridBagConstraint....

  4. #4
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    pour faire une interface variable (avec des composants qui apparaissent ou disparaissent sans que la grille globale ne varie, il faut :

    1) configurer les dimensions des composants pour qu'elles soient fixes dans la grille, quelque soit les autres composants à tout moment
    2) remplir dès le départ les cases de la grille avec des bouches-trous qui ont les dimensions des composants qui y apparaîtront à un moment donné.

    Autre solution : repenser l'ergonomie. Par exemple, il ne serait pas choquant que le type de jeu soit choisi dans un dialogue qui s'affiche tout d'abord, puis la fenêtre de jeu, qui correspond à l'option choisie, s'affiche ensuite. D'ailleurs, il est dommage de gâcher de l'espace pour un choix d'options qu'on a besoin que temporairement. Tu pourrais également faire un menu dans la fenêtre, avec les 2 options. Ceci te permettra ensuite de pouvoir ajouter de plus en plus d'options, sans avoir à remplir la fenêtre de jeu qui ne servent pas la plupart du temps pendant le jeu (recommencer la partie, annuler un coup, sauvegarder/charger, afficher la doc, obtenir de l'aide, etc).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

Discussions similaires

  1. Création d'un état à partir d'une requête
    Par keeepcoool dans le forum IHM
    Réponses: 1
    Dernier message: 31/03/2009, 06h44
  2. [A-03] Création d'un tableau à partir d'une requête
    Par helprojet dans le forum VBA Access
    Réponses: 3
    Dernier message: 16/02/2009, 12h41
  3. Création d'un arbre à partir d'une liste contigue
    Par karaz_karaz dans le forum C
    Réponses: 2
    Dernier message: 28/06/2008, 23h51
  4. Création d'un contact à partir d'une VCard
    Par myrddin772 dans le forum VBA Outlook
    Réponses: 8
    Dernier message: 28/05/2008, 15h38
  5. Création d'un vecteur à partir d'une structure
    Par lilyla dans le forum MATLAB
    Réponses: 4
    Dernier message: 13/02/2008, 13h45

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