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 :

recuperer une variable d'une autre classe: s'est y possible


Sujet :

avec Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 76
    Points : 48
    Points
    48
    Par défaut recuperer une variable d'une autre classe: s'est y possible
    Bonsoir,

    Recuperer et afficher une variable grace a un bouton, tout ca dans le meme fichier (meme classe), j'y arrive. mais lorsque ce sont des classes differentes (fichiers), je bloque totalement.

    Voici le code
    Classe de la fenetre principale
    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
     
    import javax.swing.JFrame;
    import javax.swing.JPanel;
    import javax.swing.JLabel;
    import javax.swing.JOptionPane;
     
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.GridLayout;
     
    public class MainWin extends JFrame {
     
    	// objets crees/importes
    	JPanel panContainer= new JPanel();
     
    	JPanel panNorth= new JPanel();
    	JPanel panCenter= new JPanel();
    	JPanel panSouth= new JPanel();
    	JPanel panEast= new JPanel();
    	JPanel panWest= new JPanel();
     
    	JLabel lblAfficheNom= new JLabel();
    	JLabel lblNom= new JLabel();
     
    	Humain h01= new Humain();
    	Btn btn= new Btn();
     
    	// variables
     
    	// constructeur
    	public MainWin() {
    		this.setSize(800, 822);
    		this.setTitle("");
    		this.setLocationRelativeTo(null);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		//-----
    		this.setContentPane(panContainer);
    		this.setLayout(new BorderLayout());
    		//-----
    		this.getContentPane().add(panNorth, BorderLayout.NORTH);
    		this.getContentPane().add(panCenter, BorderLayout.CENTER);
    		this.getContentPane().add(panSouth, BorderLayout.SOUTH);
    		this.getContentPane().add(panEast, BorderLayout.EAST);
    		this.getContentPane().add(panWest, BorderLayout.WEST);
     
    		panNorth.setBackground(Color.black);
    		panCenter.setBackground(Color.white);
    		panSouth.setBackground(Color.black);
    		panEast.setBackground(Color.black);
    		panWest.setBackground(Color.black);
    		//-----
    		panCenter.setLayout(new GridLayout(1, 2));
     
    		lblAfficheNom.setText("affiche le nom");
     
    		panCenter.add(lblAfficheNom);
    		panCenter.add(lblNom);
    		panCenter.add(btn);
     
    		//-----
    		//JOptionPane.showMessageDialog(null, "alert", "alert", JOptionPane.ERROR_MESSAGE);
    		//JOptionPane.showInternalMessageDialog(panCenter, "information", "information", JOptionPane.INFORMATION_MESSAGE);
    		//JOptionPane.showConfirmDialog(null, "choose one", "choose one", JOptionPane.YES_NO_OPTION);
     
     
    		this.setVisible(true);
    	}
    }
    code de la classe Humain
    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
     
    public class Humain {
     
    	// variables
    	public String nom= "dupont";
    	public String prenom= "martin";
     
    	// constructeur
    	public Humain() {
     
    	}
     
    	// getters
    	public String getNom() {
    		return this.nom;
    	}
    }
    et code de la classe Btn
    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
     
    import javax.swing.JButton;
     
    import java.awt.Graphics;
    import java.awt.Color;
     
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    public class Btn extends JButton implements ActionListener {
     
    	// variables
     
    	// contructeur
    	public Btn() {
    		this.addActionListener(this);
    	}
     
    	// getters
     
    	// setters
     
    	// methodes de classe
     
     
    	public void actionPerformed(ActionEvent arg0) {
    		// TODO Auto-generated method stub
    		lblNom.setText(h01.getNom());
    	}
    }
    Avec ce code dans Btn, eclipse dit que lblNom et h01 ne peuvent pas etre resolus.
    Mais si jamais je fais heriter Btn de MainWin (ma classe principale), alors les noms de variable sont résolus mais je ne peux pas implémenter mon Actionlistener.

    Alors je sais pas si concevoir une interaction de ce genre est possible ou pas.

    En vous remerciant pour les reponses.
    areuh
    longue vie aux forums

  2. #2
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2008
    Messages
    328
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mexique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Juin 2008
    Messages : 328
    Points : 459
    Points
    459
    Par défaut
    Bonjour,

    Pour récupérer une variable se trouvant dans une classe exrterne, procéder de la manière suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type variable = Nom_de_la_classe.nom_de_la_methode():
    -type variable est la variable qui sera retournée.
    -Nom_de_la_classe est la classe externe en question.
    -nom_de_la_methode est la methode qui contient, ou qui permet d'obtenir, la donnée dont nous avons besoin (par exemple le prix d'un article).
    Dans ce cas nous devrons certainement fournir le code article à la methode.

    Notre code devient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    double prix = Nom_de_la_classe.nom_de_la_methode(numArticle);
    La methode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    public static double nom_de_la_methode(int numArticle);
    {
    // lecture du fichier articles
    // obtension du prix
    return le_prix;
    }
    Cordialement,

    Dan

  3. #3
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    Petit rappel de programmation objet :

    ta variable hO1 a été déclarée en variable membre de la classe MainWin, donc si tu veux y accéder, tu doit passer par un objet de type 'MainWin' ! De même pour ton bouton et ton label.

    Une solution simple : Quand tu construis ton bouton, passe en paramètre la référence de l'objet courant MainWin ainsi tu pourras garder dans ta classe bouton une référence sur ton objet MainWin et accéder à l'humain et au label !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class Btn extends JButton implements ActionListener {
     
    	// variables
    	MainWin parent = null ;
    	// contructeur
    	public Btn(MainWin adr) {
                     parent = adr
    		this.addActionListener(this);
    	}
    Hope it helps !
    Nouveau ! Il y a une vie après le java, oxygénez-vous

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 76
    Points : 48
    Points
    48
    Par défaut
    Bonjour,

    danimo
    tu passes par des variables et methodes de classe, les static, ok c'est cool, ca fonctionne nickel.

    g0up1l
    tu passes en parametre une ref de l'objet courant MainWin, ok aussi ca fonctionne.

    Apres faut voir suivant la situation dans laquelle je me trouve, ce qui est le plus logique à utiliser.

    Une derniere question.
    danimo, tu ne m'indiques pas comment afficher ma variable, dc a priori, en ce qui concerne l'affichage, je suis obligé de mixer les static et la ref à l'objet courant MainWin.

    g0up1l, tu m'indiques "Une solution simple ".

    Dc, y a t-il un (ou plusieurs) autre(s) moyen(s) d'afficher ma variable?

    Voilà, en vous remerciant d'avoir éclairé ma lanterne, c'est cool de votre part.

    PS: je mets le tag RESOLU lorsque vous repondrez.
    Merci encore.

    areuh
    longue vie aux forums

  5. #5
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    C'est une solution simple mais pas très propre car il est déconseillé en POO d'avoir des objet inter-dépendant (il faut éviter les cycles).

    Essaye de passer la réf. de ton humain à ton bouton et le tour est joué !
    Hope it helps !
    Nouveau ! Il y a une vie après le java, oxygénez-vous

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 76
    Points : 48
    Points
    48
    Par défaut
    Hop,

    t'es toujours la, j'en profite...

    oui, je peux mais si ds la classe Btn, j'enleve cette ref a l'objet courant, mon lblNom n'est plus résolu.
    Dc a part creer le bouton dans la classe MainWin, je ne vois pas comment faire pour ensuite afficher cette variable.

    a+
    areuh
    longue vie aux forums

  7. #7
    Membre actif Avatar de g0up1l
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    341
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 341
    Points : 294
    Points
    294
    Par défaut
    Tu peux aussi définir ta classe MainWin comme cible des évènement du bouton :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class MainWin extends JFrame implements ActionListener
    comme ca tu as tous sous la main pour faire ton traitement
    Hope it helps !
    Nouveau ! Il y a une vie après le java, oxygénez-vous

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Février 2003
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 76
    Points : 48
    Points
    48
    Par défaut
    Ok, dc c'est bien ça:
    ou j'applique ta methode "pas tres propre", la ref a l'objet courant ds le constructeur de Btn
    ou j'implemente l'interface ActionListener et sa methode actionPerformed() dans MainWin.

    A vue de nez je dirai que je prefere nettement la methode "pas tres propre" parce qu'écrire une partie du code Btn dans MainWin ne m'inspire pas.
    Le probleme c'est que j'ai qu'un seul Btn, comment je vais faire pour creer 2 Btn et differencier leur actionPerformed()..?

    Enfin, je vais réfléchir au problème.
    je mets le tag, merci encore pour vos réposes.
    a+
    areuh
    longue vie aux forums

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

Discussions similaires

  1. Recuperer le nom d'une variable dans une variable String
    Par aliwassem dans le forum Langage
    Réponses: 11
    Dernier message: 23/10/2009, 12h38
  2. Réponses: 9
    Dernier message: 30/01/2009, 12h04
  3. Garder une référence vers une variable d'une autre classe
    Par choupeo dans le forum Windows Forms
    Réponses: 5
    Dernier message: 08/12/2007, 18h30
  4. Passer une variable d'une form a l'autre
    Par 6BORG dans le forum Delphi
    Réponses: 3
    Dernier message: 19/08/2006, 17h15
  5. [debutant]passager une variable d'une page a une autre
    Par Eisy dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 17/03/2006, 11h18

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