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

avec Java Discussion :

Comment récupérer une variable d'une classe interne dans une autre classe


Sujet :

avec Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Comment récupérer une variable d'une classe interne dans une autre classe
    Bonjour,

    Je suis un grand débutant en Java (j'ai commencé le mois dernier).

    J'aurai souhaité savoir s'il était possible d'utiliser une variable d'une classe interne dans une autre classe. Je m'explique.

    J'ai deux classes. Une qui s'appelle ChampsRegion.java et l'autre que l'on va appeler RemplissageChamps.java


    La première classe ChampsRegion permet de sélectionner une région via une JComboBox. 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
    51
    52
    53
    54
    // Création classe pour le champs région
    public class ChampsRegion extends JPanel {
    	// Création d'un tableau avec les régions
    	String[] tab = {"\"Choisissez votre région\"", "Alsace", "Aquitaine", "Auvergne", "Basse-Normandie", "Bourgogne", "Bretagne", "Centre", "Champagne-Ardenne", "Corse", "Franche-Comté", "Haute-Normandie", "Ile-de-France", "Languedoc-Roussillon", "Limousin", "Lorraine", "Midi-Pyrénées", "Nord-Pas-de-Calais", "Pays de la Loire", "Picardie", "Poitou-Charentes", "Provence-Alpes-Côte d'Azur", "Rhône-Alpes", "Guadeloupe", "Martinique", "Guyane", "Réunion"}; 
    	// Création d'un champs région
    	JComboBox region = new JComboBox(tab);
    	// Texte "Région"
    	JLabel texteregion = new JLabel("Région");
     
     
    	public ChampsRegion() {
    		// Couleur de fond blanche pour le conteneur		
    		this.setBackground(Color.white);
    		//Ajout du texte dans le conteneur
    		this.add(texteregion);
    		// Ajout du champs dans le conteneur
    		this.add(region);
    		// taille du champs
    		region.setPreferredSize(new Dimension (200,20));
    		// Option par défaut en indiquant l'index dans le tableau
    		region.setSelectedIndex(0);
     
    		//Ajout des listener  ItemListener ( qu'on va utiliser pour voir quel élement est déselectionné et sélectionné) et ActionListener (pour récupérer l'élément sélectionné)
    		region.addItemListener(new ItemState());
    		region.addActionListener(new ItemAction());
     
     
    	}	
     
    	// Classe interne implémentant l'interface ItemListener
     
    	class ItemState implements ItemListener{
    	    public void itemStateChanged(ItemEvent e) {
     
    	    }               
    	  }
     
     
    	// Classe interne implémentant l'interface ActionListener
    	class  ItemAction implements ActionListener{
    		public void actionPerformed(ActionEvent e) {
    			JComboBox cb = (JComboBox)e.getSource();
    			String valeurRegion = (String)cb.getSelectedItem();
    			String valeurRegionLc = new String("\"label=" + valeurRegion +"\"");
    			System.out.println(valeurRegionLc);
     
     
    		}
    	}
     
     
     
     
    	}

    J'aurais souhaité récupérer la variable valeurRegionLc pour l'utiliser dans la classe RemplissageChamps.java ou dans n'importe quelle autre classe.

    Comment puis-je faire cela.

    Merci bcp

  2. #2
    Membre à l'essai
    Inscrit en
    Octobre 2013
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Octobre 2013
    Messages : 27
    Points : 12
    Points
    12
    Par défaut
    Ce que je ferai c'est créer une variable global et dans ta sous-classe ItemAction, tu changes la valeur ce cette variable d'instance.

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci de ta réponse


    C'est à dire je rajoute au début de mon code String valeurRegionLbc = new String(); :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    public class ChampsRegion extends JPanel {
     
    // ici le code ne change pas, puis : 
     
     String valeurRegionLbc = new String();

    et après la sous classe ItemAction transmettra la valeur de la variable valeurRegionLc. C'est bien ça ?


    Si c'est ça. Après je fais comment pour appeler valeurRegionLc depuis une autre classe ? J'ai fais ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
     
    String test = new String();
     
    test = ChampsRegion.valeurRegionLbc();
    Mais ça me donne un message d'erreur "The method valeurRegionLbc() is undefined for the type ChampsRegion"


    J'ai l'impression de m'emméler un peu les pinceaux

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 547
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 547
    Points : 21 602
    Points
    21 602
    Par défaut
    Le mieux est de créer une classe dédiée à contenir l'état actuel des informations connues de ton application.
    Il y a entre autres ce String valeurRegionLbc;

    Au début de ton programmes tu crées une instance de cette classe, et tu fournis cette instance à tous les éléments que ça intéresse de connaître l'état. Ainsi, ils peuvent consulter l'état et changer l'état à tout moment.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre habitué
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Août 2005
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 86
    Points : 174
    Points
    174
    Par défaut
    Hello jack93,

    Tout dépend de la conception et des contraintes, ici je te propose 2 solutions Pour accéder à ta variable valeurRegionLc de la classe ChampsRegion, tu dois déclarer celle-ci :

    - Soit comme membre privé et tu y accèdes via un getter

    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
     
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
     
    import javax.swing.JComboBox;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
     
    // Création classe pour le champs région
    public class ChampsRegion extends JPanel {
     
        // Création d'un tableau avec les régions
        String[] tab = {"\"Choisissez votre région\"", "Alsace", "Aquitaine", "Auvergne", "Basse-Normandie", "Bourgogne", "Bretagne", "Centre", "Champagne-Ardenne", "Corse", "Franche-Comté", "Haute-Normandie", "Ile-de-France", "Languedoc-Roussillon", "Limousin", "Lorraine", "Midi-Pyrénées", "Nord-Pas-de-Calais", "Pays de la Loire", "Picardie", "Poitou-Charentes", "Provence-Alpes-Côte d'Azur", "Rhône-Alpes", "Guadeloupe", "Martinique", "Guyane", "Réunion"};
        // Création d'un champs région
        JComboBox region = new JComboBox(tab);
        // Texte "Région"
        JLabel texteregion = new JLabel("Région");
     
        private String valeurRegionLbc;
     
     
        public ChampsRegion() {
            // Couleur de fond blanche pour le conteneur
            this.setBackground(Color.white);
            //Ajout du texte dans le conteneur
            this.add(texteregion);
            // Ajout du champs dans le conteneur
            this.add(region);
            // taille du champs
            region.setPreferredSize(new Dimension (200,20));
            // Option par défaut en indiquant l'index dans le tableau
            region.setSelectedIndex(0);
     
            //Ajout des listener  ItemListener ( qu'on va utiliser pour voir quel élement est déselectionné et sélectionné) et ActionListener (pour récupérer l'élément sélectionné)
            region.addItemListener(new ItemState());
            region.addActionListener(new ItemAction());
        }
     
        // Classe interne implémentant l'interface ItemListener
     
        class ItemState implements ItemListener{
            @Override
            public void itemStateChanged(ItemEvent e) {
     
            }
        }
     
     
        // Classe interne implémentant l'interface ActionListener
        class  ItemAction implements ActionListener{
            @Override
            public void actionPerformed(ActionEvent e) {
                JComboBox cb = (JComboBox)e.getSource();
                String valeurRegion = (String)cb.getSelectedItem();
                valeurRegionLbc = new String("\"label=" + valeurRegion +"\"");
                System.out.println(valeurRegionLbc);
            }
        }
     
     
        public String getValeurRegionLbc() {
            return valeurRegionLbc;
        }
     
    }
    Ici dans la classe RemplissageChamps tu instancies ChampsRegion ou tu récupère l'instance d'un autre objet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class RemplissageChamps {
     
        ChampsRegion champsRegion;
     
        public RemplissageChamps() {
            champsRegion = new ChampsRegion();
        }
     
        public void remplirChamps(){
            //....
            System.out.println(champsRegion.getValeurRegionLbc());
        }
    }
    - Soit comme variable public static

    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
     
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.ItemEvent;
    import java.awt.event.ItemListener;
     
    import javax.swing.JComboBox;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
     
    // Création classe pour le champs région
    public class ChampsRegion extends JPanel {
     
        // Création d'un tableau avec les régions
        String[] tab = {"\"Choisissez votre région\"", "Alsace", "Aquitaine", "Auvergne", "Basse-Normandie", "Bourgogne", "Bretagne", "Centre", "Champagne-Ardenne", "Corse", "Franche-Comté", "Haute-Normandie", "Ile-de-France", "Languedoc-Roussillon", "Limousin", "Lorraine", "Midi-Pyrénées", "Nord-Pas-de-Calais", "Pays de la Loire", "Picardie", "Poitou-Charentes", "Provence-Alpes-Côte d'Azur", "Rhône-Alpes", "Guadeloupe", "Martinique", "Guyane", "Réunion"};
        // Création d'un champs région
        JComboBox region = new JComboBox(tab);
        // Texte "Région"
        JLabel texteregion = new JLabel("Région");
     
        public static String  valeurRegionLbc;
     
     
        public ChampsRegion() {
            // Couleur de fond blanche pour le conteneur
            this.setBackground(Color.white);
            //Ajout du texte dans le conteneur
            this.add(texteregion);
            // Ajout du champs dans le conteneur
            this.add(region);
            // taille du champs
            region.setPreferredSize(new Dimension (200,20));
            // Option par défaut en indiquant l'index dans le tableau
            region.setSelectedIndex(0);
     
            //Ajout des listener  ItemListener ( qu'on va utiliser pour voir quel élement est déselectionné et sélectionné) et ActionListener (pour récupérer l'élément sélectionné)
            region.addItemListener(new ItemState());
            region.addActionListener(new ItemAction());
        }
     
        // Classe interne implémentant l'interface ItemListener
     
        class ItemState implements ItemListener{
            @Override
            public void itemStateChanged(ItemEvent e) {
     
            }
        }
     
        // Classe interne implémentant l'interface ActionListener
        class  ItemAction implements ActionListener{
            @Override
            public void actionPerformed(ActionEvent e) {
                JComboBox cb = (JComboBox)e.getSource();
                String valeurRegion = (String)cb.getSelectedItem();
                valeurRegionLbc = new String("\"label=" + valeurRegion +"\"");
                System.out.println(valeurRegionLbc);
            }
        }
    }
    Ici tu accèdes directement à la vriable de classe valeurRegionLbc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    public class RemplissageChamps {
     
        ChampsRegion champsRegion;
     
        public RemplissageChamps() {
            // TODO Auto-generated constructor stub
        }
     
        public void remplirChamps(){
            //....
            System.out.println(ChampsRegion.valeurRegionLbc);
        }
    }
    Awane
    Si mon message t'a aidé, un petit ne fera pas de mal
    Pensez aussi à

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Octobre 2013
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Octobre 2013
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    ça marche parfaitement.

    merci !

  7. #7
    Modérateur
    Avatar de MasterMbg
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2011
    Messages
    719
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Congo-Kinshasa

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2011
    Messages : 719
    Points : 1 493
    Points
    1 493
    Par défaut
    Bonjour,
    sachant que la discusion étant résolue j'aimerais au moins apporter une précision sur l'utilisation d'une classe interne vu que celle ci dans le contexte de ce sujet soit un peu mal comprise.
    Je dirais ceci, une nécessité d'utilisation d'une classe interne vient du fait qu'on veuille accéder à tous les éléments de la classe englobante comme s'ils appartenaient à cette classe interne. Tout en cachant ceux de la classe interne de l'exterieur. Cad, une classe interne n'est visible que dans la classe dans laquelle elle est définie. Donc elle ne peut être instanciée de l'exterieur (dans une autre classe).
    Ca ne doit pas être par plaisir créer une classe interne. vous devez vous assurer :
    - soit vous voulez définir cette dernière à l'endroit où une seule autre en a besoin;
    - soit définir une classe de type adapter (pour traiter des événements émis par les objets d'une interface graphique);
    - soit définir des méthodes de type callback en général.
    Donc si on veut utiliser le paradigme de classe interne à bon escient, on ne doit tolérer en aucun cas l'accès à ses membres de l'exterieur (dans une autre classe que celle dans laquelle elle est définie). Merci
    Plus tu apprends sérieusement, plus tu te rapproches d'un savoir noble. Une chose est certaine, les difficultés ne s'écarteront de ton chemin...

    Tu es nouveau dans le développement Android, la page des COURS est là pour te faciliter la vie
    Tu peux trouver la réponse à ta question dans la FAQ
    Retrouvez mon tutoriel sur la consommation des services web SOAP
    Pense à voter positivement en appuyant sur en bas à droite de la réponse qui t'a donné une piste de solution.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 07/10/2014, 11h28
  2. Réponses: 1
    Dernier message: 23/05/2012, 23h41
  3. Réponses: 5
    Dernier message: 04/12/2008, 16h58
  4. Réponses: 5
    Dernier message: 09/06/2008, 09h57
  5. Class interne dans une classe template
    Par MatRem dans le forum Langage
    Réponses: 26
    Dernier message: 15/06/2006, 11h45

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