Bonjour,

Je débute et tente de comprendre les mécanismes de Java.
J'ai un souci car une variable déclarée publique est "null"
Dans ce test, il y a 3 classes, la première point d'entrée crée une frame
la deuxième place les menus, enfin la dernière gère les évènements

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
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));
	}
}
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
25
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;
		}
	}
}
_obj pointe la Frame mais le label "lbl" est NULL

Merci de votre aide.