Bonjour,
J'ai un ennui avec un programme qui ne fonctionne pas. Je pense avoir fait le tour, et je suis en manque d'inspiration pour le résoudre.
Pour une interface graphique, j'ai crée un objet BarreDeMenu qui hérite de JMenuBar. J'ai crée un objet Fenetre (hérité de JFrame), dans lequel j'appelle BarreDeMenu, et d'autres éléments SWING. Dont un JPanel, auquel je mets un CardLayout pour naviguer dans mes menus. (Est-ce bien cette solution la plus efficace).
Dans le programme principale :class BarreDeMenu extends JMenuBar implements ActionListener{
JMenu[] Menu = new JMenu[10];
public JMenuItem[] MenuItem = new JMenuItem[30];
Fenetre frame;
/** Constructeur de BarreDeMenu
* On référence le conteneur Fenetre pour gérer la mise à jour du
* panneau central
*/
BarreDeMenu(Fenetre parente){
frame = parente;
//etc... configuration barre de menu, addactionlistener
}
public void actionPerformed(ActionEvent evt){
Object source = evt.getSource();
frame.MiseAJour(source);
}
}
Le probleme vient du passage de paramètres entre ma classe BarreDeMenu et Fenetre. Il doit y a voir une référence à un objet qui se perd. En gras, les éléments qui devraient vous interresser pour me répondre.
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 public class Fenetre extends JFrame { BarreDeMenu barre; JPanel pane,carte1,carte2,carte3; //TESTS JTextArea zone_message; CardLayout cc; public Fenetre() { // On règles les paramètres de la fenêtre. super("Tubtronics"); this.setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); [b]BarreDeMenu barre = new BarreDeMenu(this);[/b] JPanel pane = new JPanel(); CardLayout cc = new CardLayout(); pane.setLayout(cc); pane.setBackground(Color.ORANGE); pane.setSize(500,500); JPanel carte1 = new JPanel(); carte1.setSize(500,500); pane.add("Carte 1", carte1); JPanel carte2 = new JPanel(); carte1.setSize(500,500); pane.add("Carte 2", carte2); JPanel carte3 = new JPanel(); carte1.setSize(500,500); pane.add("Carte 3", carte2); JTextArea zone_message = new JTextArea(); this.setLayout(new BorderLayout()); add("North", barre); add("Center", pane); add("South", zone_message); } [b] void MiseAJour(Object src) { for (int j=0; j<30;j++){ if (src == barre.MenuItem[j]){ System.out.println("Commande = " + barre.MenuItem[j].getText()); }} //cc.next(this); }[/b] public static void main(String args[]) { Fenetre fenetre = new Fenetre(); fenetre.pack(); fenetre.setVisible(true); } }
Partager