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 :

Recuperation d'une variable ?!


Sujet :

AWT/Swing Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Par défaut Recuperation d'une variable ?!
    Bonjour
    J'ai u petit soucis avec une classe nommee QuiSuisJe.
    Cette classe ouvre une fenetre JFrame et demande (via 2 boutons) qui est l'utilisateur ("Bidule" ou "Machin").
    Lorsque j'appuie sur l'un des boutons, la variable "Utilisateur" est correcte (dans le actionperformed) mais le main ne me sort rien du tout ?!!

    Ou est le probleme ? (peut etre est ce un probleme de declaration static/private/public ?)... Merci pour vos conseils !!!

    Voici le 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
    import java.io.*;
    import java.util.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.*;
     
    public class QuiSuisJe 
    { 
        private String Utilisateur=null;
        private JFrame FenUser=new JFrame("Qui es tu ?");
     
       // constructeur
       QuiSuisJe() {
           JButton But0=new JButton("BIDULE");
           JButton But1=new JButton("MACHIN");
     
        FenUser.setLayout(new BorderLayout());
        FenUser.add(But0,BorderLayout.NORTH);
        FenUser.add(But1,BorderLayout.SOUTH);
        FenUser.setBounds(400, 300, 100, 100);
     
        But0.addActionListener(new MonActionListenerQui());
        But1.addActionListener(new MonActionListenerQui());
     
        FenUser.pack();
        FenUser.setVisible(true); 
        }    
     
        private class MonActionListenerQui implements ActionListener {
                public void actionPerformed(ActionEvent e) {
                   //System.out.println(e.getActionCommand()); ICI, c'est OK
            if (e.getActionCommand().equals("BIDULE")) {
                Utilisateur="Bidule";
            } else if (e.getActionCommand().equals("MACHIN")) {
                Utilisateur="Machin";
            }
     
         }
        }       
     
         public String GetUserName(){return Utilisateur;}
     
        public static void main(String[] args){
            QuiSuisJe QUI=new QuiSuisJe();
            // Ici, il ne veut pas me sortir le nom de l'utilisateur ?!
            System.out.println(QUI.GetUserName());
       }
    }

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Pour ta question, c'est parceque l'action "System.out.println(QUI.GetUserName());" est effectuée immédiatement après la création de ta fenêtre, avant que tu n'aies le temps de cliquer sur le moindre bouton. Donc à ce moment-là, "Utilisateur" n'est pas initialisée (null)

    C'est le clic sur ton bouton qui doit déclencher le "System.out.println()" si tu veut voire quelque chose dans la console

    Ensuite, pour ton code, tu as besoin de reprendre les bases de java... et entre autre les conventions de nommage!

    => les noms de classe commencent par des majuscules
    => les noms de variables et de méthodes par des minuscules
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre expérimenté Avatar de aJavaDeveloper
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 248
    Par défaut
    La cause de ton problème est très simple : l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    QuiSuisJe QUI=new QuiSuisJe();
    n'est pas bloquante.
    En fait, ta fonction main() te crée ton frame et t'affiche ensuite directement la valeur de l'attribut Utilisateur qui, à ce moment-là, est encore null...
    Autrement dit, ta fonction main() n'attend pas que tu aies cliqué sur un boutton pour afficher la valeur de l'attribut Utilisateur...

    [OUPS] Désolé pour la réponse dupliquée mais j'ai mis un peu de temps à rédiger...

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Par défaut
    Merci pour vos reponses,

    mais alors .. dans mon main, comment dois je faire pour que je puisse récupérer la bonne valeur de l'attribut Utilisateur afin d'ouvrir ensuite, par exemple, une autre fenetre avec le nom de l'Utilisateur ?
    Comment lui dire qu'il faut attendre un click sur bouton avant de passer a autre chose ?

    Merci encore .

  5. #5
    Membre expérimenté Avatar de aJavaDeveloper
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 248
    Par défaut
    Je pense que la classe JOptionPane est la solution la plus simple pour faire ce que tu veux...
    Voici un lien qui pourrait t'intéresser : http://java.sun.com/docs/books/tutor...ts/dialog.html.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Par défaut
    Oui mais .. ca ne me dit pas comment je peux recuperer la valeur Utilisateur dans mon main ?

  7. #7
    Membre expérimenté Avatar de aJavaDeveloper
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 248
    Par défaut
    Citation Envoyé par pepito31
    Oui mais .. ca ne me dit pas comment je peux recuperer la valeur Utilisateur dans mon main ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import javax.swing.JOptionPane;
     
    public class Main {
     
    	public static void main(String[] args) {
    		 Object[] possibleValues = { "BIDULE", "MACHIN" };
    		 Object user = JOptionPane.showInputDialog(null, "Qui es-tu ?", "Input", JOptionPane.INFORMATION_MESSAGE, null, possibleValues, possibleValues[0]);
    		 System.out.println(user);
    	}
    }

  8. #8
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Par défaut
    Pardon, aJavaDeveloper, je me suis mal exprimé ...
    (merci pour ta reponse quand meme !! )

    Dans mon code initial (sans JOptionPane), comment puis je recuperer ma valeur de Utilisateur ? Et comment faire surtout, pour que l'appel à une autre Frame (ci-dessous dans le main) se fasse apres avoir cliqué sur un des deux boutons ? (Comme tu l'as dit, il n'attend pas que l'on ait cliqué sur le bouton pour donner une valeur à Utilisateur !! C'est donc pareil pour l'appel à la classe MaFrame sui suit !).

    PS : j'ai utilisé JOptionPane et ca marche tres bien (merci) mais j'aimerais comprendre pourquoi, dans mon cas, ca ne peut pas fonctionner ?!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public static void main(String[] args){
            QuiSuisJe QUI=new QuiSuisJe();
            // Ici, il ne veut pas me sortir le nom de l'utilisateur ?!
            System.out.println(QUI.GetUserName()); 
          // Il ouvre MaFrame avant tout click !! ????
           new MaFrame();
     
       }

  9. #9
    Membre expérimenté Avatar de aJavaDeveloper
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 248
    Par défaut
    j'aimerais comprendre pourquoi, dans mon cas, ca ne peut pas fonctionner ?!
    Ben il me semble qu'on vient de t'expliquer pourquoi...

    Un JOptionPane remplace tout à fait ta classe QuiSuisJe.
    Je ne vois pas pourquoi tu veux encore utiliser cette dernière...

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Par défaut
    Parce que je pensais qu'avec une JOPtionPane, on ne pouvait pas creer ses propres composants et les placer comme on le sent avec des layout ..

    Merci encore pour les infos !

  11. #11
    Membre expérimenté Avatar de aJavaDeveloper
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 248
    Par défaut
    Parce que je pensais qu'avec une JOPtionPane, on ne pouvait pas creer ses propres composants et les placer comme on le sent avec des layout ..
    As-tu finalement réussi à utiliser un JOPtionPane pour faire ce que tu voulais ?

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Par défaut
    Oui, ca a marché !
    Merci, JOptionPane est simple d'utilisation (meme config. que pour VB)

    Question subsidiaire ...
    J'ai l'impression qu'on ne peut pas organiser les composants comme on le souhaite, avec JOptionPane (avec un GridLayout par ex...)
    Dans ma classe QuiSuisJe, j'ai ajouté 2 autres valeurs possibles et je voudtais les mettre sous forme de grille 2x2 ... or, rien n'y fait. Les boutons restent desesperement les uns a la suite des autres .. ?
    Une solution pour cela ? Si oui, alors, je serai totalement convaincu de JOptionPane.

    Merci

    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 java.io.*;
    import java.util.*;
    import java.awt.*;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    import javax.swing.*;
     
    public class QuiSuisJe_JOptionPane 
    {
     
    	private String Utilisateur=null;
    	private JOptionPane MaBoite= new JOptionPane();
    	// constructeur
       QuiSuisJe_JOptionPane() {
     
     
    	   Object[] possibleNames = { "MACHIN", "BIDULE", "TRUC", "CHOSE"}; 
    	   MaBoite.setLayout(new GridLayout(2,2)); // Les boutons restent alignés de gauche à droite ???
    	   int intName=MaBoite.showOptionDialog(null, 
    			   			"QUI ES TU ?", "QUESTION", 
    			   			JOptionPane.YES_NO_OPTION, 
    			   			 JOptionPane.QUESTION_MESSAGE, 
    			   			null, possibleNames, possibleNames[0]);
    		// System.out.println(intName);     
    		if (intName==0){
    			Utilisateur="MACHIN";
    		} else if (intName==1){
    			Utilisateur="BIDULE";   
                    } else if (intName==2){
    			Utilisateur="TRUC"; 
    		} else {
                           Utilisateur="CHOSE";
                    } 
     
        }	
          // Pour recuperer le nom de l'utilisateur
    	   public String GetUserName(){
    		   return Utilisateur;
    	   }
     
    }

  13. #13
    Membre expérimenté Avatar de aJavaDeveloper
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    248
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Juin 2007
    Messages : 248
    Par défaut
    Tu peux t'inspirer du code ci-dessous (qui est déjà fonctionnel) :
    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
    import java.awt.GridLayout;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
     
    import javax.swing.*;
     
    public class NamesPanel extends JPanel implements ItemListener {
     
        private static final long serialVersionUID = 1L;
        private String utilisateur = "";
     
        public NamesPanel(int nbrCols, String[] names) {
        	super(new GridLayout(nbrCols, 0));  
            ButtonGroup group = new ButtonGroup();
            JRadioButton current;
            for(int i=0; i<names.length; i++)
            {
                if(i==0)
                	current = new JRadioButton(names[i], true);
                else
                	current = new JRadioButton(names[i], false);
                current.addItemListener(this);
                group.add(current);
                add(current);
            }
        }
     
        public void itemStateChanged(ItemEvent evt) {
    	utilisateur = ((JRadioButton)evt.getSource()).getLabel();
        }
     
        public String getUtilisateur() {
    	return utilisateur;
        }
     
        public static void main(String[] args) {
        	String[] names = new String[] {"TRUC", "MACHIN", "BIDULE", "CHOSE"};
            int nbrCols = 2;
            NamesPanel myPanel = new NamesPanel(nbrCols, names);
     
        	int result = JOptionPane.showOptionDialog(
                null, 
                myPanel, 
                "QUI ES TU ?",
                JOptionPane.YES_OPTION,
                JOptionPane.INFORMATION_MESSAGE,
                null, 
                new String[] {"OK"},
                "OK");
     
        	if(result == 0)
        		System.out.println(myPanel.getUtilisateur());
        }
    }

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Juin 2007
    Messages : 104
    Par défaut
    Ok, je vais m'inspirer de ca ..
    Merci encore pour ton aide !


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

Discussions similaires

  1. Recuperation d'une variable dans un second sub
    Par tineighty dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 17/10/2007, 17h36
  2. [Actionscript] Recuperation d'une variable php
    Par cerede2000 dans le forum Flash
    Réponses: 11
    Dernier message: 27/02/2007, 13h44
  3. [XSL] Problème recuperation d'une variable XSL
    Par vinzmeister dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 29/05/2006, 16h41
  4. Récupération d'une variable <form>
    Par Pique dans le forum Langage
    Réponses: 4
    Dernier message: 22/05/2006, 15h07
  5. [FLASH MX2004] Recuperation d'une variable php
    Par Shooter dans le forum Flash
    Réponses: 2
    Dernier message: 30/06/2005, 10h37

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