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 :

Passage de variable entre classes


Sujet :

AWT/Swing Java

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Passage de variable entre classes
    Bonjour à tous !

    J'ai un petit soucis dans mon programme ... Je vous joins directement un programme très simplifié avec en commentaire le problème que j'ai

    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
     
    // import ...
    public class test
     
    {
     
    	public static void main(String []args)
     
    	{
    		cadre fenetre = new cadre("Fenetre",150,150,1365,718);
    	}
     
    }
     
     
     
    class cadre extends JFrame
    {
    	public cadre(String nom,int X,int Y,int H,int L)               
     
    	{
     
    		super(nom);
    		setBounds(X,Y,H,L);
    		setDefaultCloseOperation(EXIT_ON_CLOSE);            
    		getContentPane().add(new PanneauCadre());
    		setVisible(true);
     
    	}
    }
     
    class PanneauCadre extends JPanel
    {
           private JRadioButton a1 = new JRadioButton("choix1");
           private JRadioButton a2 = new JRadioButton("choix2");
           private JRadioButton a3 = new JRadioButton("choix3");
           public int choix = 0;  // declaration d'une variable entiere du choix
           // On les réunit dans un buttonGroup, je le fais pas ici pour supprimer des lignes de codes :)
     
          public PanneauCadre()
          {
                   a1.addItemListener(new Ecouteur1());
                   a2.addItemListener(new Ecouteur2());
                   a3.addItemListener(new Ecouteur3());
          }
     
           public class Ecouteur1 implements ItemListener
     
    	{
    		public void itemStateChanged(ItemEvent evt)
     
    		{
     
    			evt.getItem();
        		        if(evt.getStateChange() == ItemEvent.SELECTED)
        		     	       choix = 1;
    		}
     
    	}
     
    	public class Ecouteur2 implements ItemListener
     
    	{
    		public void itemStateChanged(ItemEvent evt)
     
    		{
     
    			evt.getItem();
        		        if(evt.getStateChange() == ItemEvent.SELECTED)
        		     	choix = 2;
     
    		}
    	}
     
    	public class Ecouteur3 implements ItemListener
     
    	{
    		public void itemStateChanged(ItemEvent evt)
     
    		{
     
    			evt.getItem();
        		        if(evt.getStateChange() == ItemEvent.SELECTED)
        		     	choix = 3;
     
    		}
        // Dans les classes évènements choix prend bien sa valeur
    	}
     
           public int getChoix()     // une méthode qui retourne la valeur du choix si c'est 1,2, ou 3 dans une autre classe qui n'est pas ici.
    	{      
                    if(choix!=0)
    		return choix;    // Le problème est qu'à cet endroit choix est toujours égal à 0
    	}
    }
    J'ai mis mes petits commentaires dans le programme, là ou ça ne marche pas ...
    Il faudrait que lorsque que l'on modifie cette variable, cela s'applique à toutes les classes.

    SI vous avez des idées, je suis preneur !

    Merci d'avance !

  2. #2
    Membre éprouvé Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Points : 934
    Points
    934
    Par défaut
    peut-être déclarer choix dans cadre et pas dans panneaucadre ?

  3. #3
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 341
    Points : 1 577
    Points
    1 577
    Par défaut
    Bonjour,

    essayez peut être de déclarer la variable choix en public static int

    @ bientôt ...

  4. #4
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Je ne saisis pas bien le problème. Est-ce la récupération de "choix" par un autre objet qui pose problème ? Ou alors la variable "choix" qui ne change jamais de valeur en dehors des listener ?

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Hélas, passer en static ne change pas le problème ni de le déclarer dans la classe cadre ...
    Disons que le programme que j'ai mis là est très simplifié.
    Je vais essayer de vous résumer la situation.
    - On dispose d'une fenetre : cadre extends JFrame.
    - Dedans j'ai plusieurs panneaux organisés avec un cardLayout : PanneauPrincipal, PanneauOption, PanneauJouer
    -Dans le PanneauOption, il y a, entre autre, 3 JRadioButton contenus dans un ButtonGroup, indiquand trois choix de difficultés différents.
    -En plaçant un événement sur ces 3 JRadioButton, j'aimerai que cette variable entière choix, issus du résultat de l'événement, prenne la valeur 1,2 ou 3 en fonction du niveau choisi.
    -Cette variable est ensuite retournée dans la classe cadre où en fonction du choix, elle affiche le panneau avec le niveau souhaité. Soit PanneauJouer1 / PanneauJouer2 ou PanneauJouer3.

    J'ai donc quelque chose comme ca :
    Classe PanneauOption :
    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
     
    public int choixDifficulte;
     
    	public class niv1selected implements ItemListener
    	{
    		public void itemStateChanged(ItemEvent evt)
    		{
    			evt.getItem();
        		     if(evt.getStateChange() == ItemEvent.SELECTED)
        		     	choixDifficulte = 1;
    		}
    	}
     
    	public class niv2selected implements ItemListener
    	{
    		public void itemStateChanged(ItemEvent evt)
    		{
    			evt.getItem();
        		     if(evt.getStateChange() == ItemEvent.SELECTED)
        		     	choixDifficulte = 2;
        		}
    	}
     
    	public class niv3selected implements ItemListener
    	{
    		public void itemStateChanged(ItemEvent evt)
    		{
    			evt.getItem();
        		     if(evt.getStateChange() == ItemEvent.SELECTED)
        		     	choixDifficulte = 3;
    		}
    	}
     
     
    	public int getChoixDifficulte()
    	{				
    	   	return choixDifficulte;   // Le problème est ici, choixDifficulte est toujours égal à 0 ...
    	}
    Et dans ma classe cadre j'aurai ceci :
    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
     
    Pp.getJouer().addActionListener(new ecout3());    // Pp est le PanneauPrincipal et jouer le bouton dessus
    private int choixDifficulte = Po.getChoixDifficulte();
     
    class ecout3 implements ActionListener
    	{									
    	    @Override
    	    public void actionPerformed(ActionEvent arg0)
    	    {
    			if(choixDifficulte == 1)
    				cardLayout.show(Pane, "PanneauJouer1");
     
    			if(choixDifficulte == 2)
    				cardLayout.show(Pane, "PanneauJouer2");
    			if(choixDifficulte == 3)
     
    				cardLayout.show(Pane, "PanneauJouer3");
    	    }
    	}
    J'espère que vous m'avez mieux compris, et merci encore pour votre aide ! =)

  6. #6
    Membre expérimenté Avatar de rtg57
    Homme Profil pro
    Autodidacte
    Inscrit en
    Mars 2006
    Messages
    1 341
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 341
    Points : 1 577
    Points
    1 577
    Par défaut
    Bonjour,

    petite question bête: avez-vous regarder en mode débogage, si le programme passe bien par les lignes de code modifiant l'état de la variable choixDifficulte ?

    @ bientôt...

  7. #7
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Points : 7 163
    Points
    7 163
    Par défaut
    Effectivement, ça ne peut pas fonctionner puisque tu fige "choixDifficulte" lorsque tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private int choixDifficulte = Po.getChoixDifficulte();
    Tu dois revoir ton architecture.
    De plus, il est dommage de créer une classe par listener.
    Autant utiliser une seule classe pour le listener qui va gérer un groupe de JRadioButton. Tu ranges tes JRadioButton dans un tableau, et le listener modifie la variable "choixDifficulte" avec l'indice du JRadioButton dans le tableau. Tu as un code plus simple et le nombre de niveaux n'est pas figé.
    En plus, tu simplifies le code.

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2010
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci !
    Je vais recoder cette partie là. Cette méthode sera beaucoup plus fructueuse en effet !
    Merci pour toutes vos réponses !

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

Discussions similaires

  1. passage de variable entre classe
    Par tilily dans le forum Langage
    Réponses: 6
    Dernier message: 17/12/2010, 16h35
  2. Problème de passage de variable entre class
    Par yasen77 dans le forum Applets
    Réponses: 0
    Dernier message: 30/07/2010, 12h54
  3. passage de variables entre classes
    Par soujava dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 28/04/2008, 12h14
  4. Passage de variables entre 2 classes ?
    Par brunoperel dans le forum Langage
    Réponses: 4
    Dernier message: 30/08/2007, 15h29
  5. [langage] Probleme passage de variables entre modules
    Par Ludo167 dans le forum Langage
    Réponses: 4
    Dernier message: 13/08/2004, 13h25

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