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

 Java Discussion :

variable public nulle


Sujet :

Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut variable public nulle
    Bonjour,

    Je débute dans Java et me familiarise avec le langage, d'où ma question surement simpliste.
    Mon objectif est de gérer un menu déroulant.
    J'ai 3 classes : MaFrame qui initialise une fenetre, MenuFenetre qui crée le menu et DispatchAction qui gère les évènements.
    Lors du choix de menu, c'est DispatchAction qui réagit et je voudrai agir sur la variable "lbl" définie dans Maframe. Or celle-ci est nulle, pourquoi ?
    Voici le code :

    MaFrame

    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
    import java.awt.*;
    import java.awt.event.WindowAdapter;
    import java.awt.event.WindowEvent;
     
    public class MaFrame extends Frame {
     
    	private static final long serialVersionUID = 1L;
    	public Label lbl;
    	public MaFrame m;
     
    	public MaFrame() {
    		super();
    		setTitle(" Titre de la Fenetre ");
    		setSize(300, 350);
    		MenuFenetre mf = new MenuFenetre(this);
    		setMenuBar(mf);
    		setVisible(true); // affiche la fenetre
    		addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e){System.exit(0);}});
    	}
     
    	public static void main(String[] args) {
    		MaFrame m =new MaFrame();
    		Label lbl=new Label("Essai de texte");
    		lbl.setName("lbl");
    		m.add(lbl);
    	}
    }
    MenuFenetre

    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
    import java.awt.*;
     
    public class MenuFenetre extends java.awt.MenuBar {
     
    	private static final long serialVersionUID = 1L;
    	public MenuItem itemQuitter, itemNouveau, itemApropos;
    	public MaFrame m;
     
    	public MenuFenetre(MaFrame m) {
    		Menu menuFichier = new Menu(" Fichier ");
    		itemNouveau = new MenuItem(" Nouveau ");
    		menuFichier.add(itemNouveau);
    		add(menuFichier);
     
    		itemNouveau.addActionListener(new DispatchAction(DispatchAction.NEW,m));	
    	}
    }
    et DispatchAction

    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
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
     
    public class DispatchAction implements ActionListener{
     
    	static final int NEW =1;
    	protected MaFrame _obj;
    	protected int _type;
     
    	DispatchAction(int type,MaFrame obj){
    		_obj=obj;
    		_type=type;
    	}
     
    	public void actionPerformed(ActionEvent e) {
    		switch (_type) {
    		case NEW:
    			System.out.print (_obj.lbl.toString());			// ERREUR 
    			break;
    		default:
    			break;
    		}
    	}
    }
    Merci de votre aide.

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    public Label lbl;

    définis un champ lbl dans la class MaFrame, mais l'instruction dans ton main

    Label lbl=new Label("Essai de texte");

    concerne une variable locale à la méthode main(), ce qui n'a rien à voir avec le champ.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Variable publique nulle
    Je ne comprends pas la distinction.
    Quand je déclare la variable (ou champ ?) "Label lbl" publique, ce n'est pas la même que celle créé dans main() ?
    Il y en a une de locale et l'autre publique ?
    Comment faut-il alors procéder ?

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Tout ce que tu déclare dans une méthode, ce sont des variable locale.

    Pour accéder au lbl de la classe, il faut faire comme tu as faire dans tes autres classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     m =new MaFrame();
     m.lbl=new Label("Essai de texte");
     m.lbl.setName("lbl");
     m.add(m.lbl);
    mais bon, c'est pas très propre, il vaut mieux créer un méthode d'instance dans MaFrame qui fait le travail pour pouvoir appeler

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    m.setLabel("Essai de texte");
    et retirer ce code du main.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Ah super !
    Ça fonctionne. J'avais pas bien saisi cette visibilité des variables.
    Par contre je ne comprends pas la deuxième partie du message.
    En quoi cette méthode n'est-elle pas propre ?
    De plus "setLabel" est une méthode pour les boutons ou les cases à cocher, quelle relation ici ?

    En tout cas merci bien pour le coup de main.

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Pas propre parce que tu fais dans le main du travail qui devrais revenir à ta classe Frame.

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

Discussions similaires

  1. Variable public nulle
    Par b.speedy dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 30/04/2012, 09h33
  2. Utilisation d'une variable public
    Par Pat51 dans le forum Access
    Réponses: 5
    Dernier message: 16/07/2006, 14h41
  3. [VBA] taille max d'une variable public
    Par gigs dans le forum Général VBA
    Réponses: 9
    Dernier message: 23/11/2005, 15h27
  4. déclaration de variable public
    Par mathieu57 dans le forum MFC
    Réponses: 5
    Dernier message: 15/09/2005, 17h36
  5. [servlet]problème de variable jamais nulle
    Par omega dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 18/03/2004, 09h31

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