Bonjour à tous !
Je suis en ce moment le tutoriel de Cysboy, et j'en suis au TP de l'ardoise magique.
Mon problème est le suivant :
Je voudrais externaliser ma barre de menu dans une autre classe. Malheureusement, Cysboy ne code pas beaucoup de cette façon (d'ailleurs je ne sais pas ce qui est le mieux mais je trouve ça un peu indigeste...) donc je galère complètement !
Je vous mets ici mes classes (je met pas la classe avec la méthode main) :
import java.awt.BorderLayout;
import java.awt.Color;
import javax.swing.JFrame;
import javax.swing.JPanel;
public class Fenetre extends JFrame{
private Panneau pan = new Panneau();
private JPanel container = new JPanel();
public Fenetre(){
this.setTitle("L'Ardoise Magique");
this.setSize(600, 600);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setLocationRelativeTo(null);
container.setBackground(Color.white);
container.setLayout(new BorderLayout());
container.add(pan, BorderLayout.CENTER);
this.setContentPane(container);
this.setVisible(true);
this.setJMenuBar(new BarreMenu());
}
}
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
public class BarreMenu extends JMenuBar {
private JMenu fichier = new JMenu("Fichier"),
edition = new JMenu("Edition"),
forme_pointeur = new JMenu("Forme du pointeur"),
couleur_pointeur = new JMenu("Couleur du pointeur"),
aPropos = new JMenu("À propos");
private JMenuItem item_effacer = new JMenuItem("Effacer"),
item_quitter = new JMenuItem("Quitter"),
aProposItem = new JMenuItem("?");
private JMenuItem item2_rond = new JMenuItem("Rond"),
item2_carre = new JMenuItem("Carré"),
item2_rouge = new JMenuItem("Rouge"),
item2_vert = new JMenuItem("Vert"),
item2_bleu = new JMenuItem("Bleu");
public BarreMenu(){
fichier.add(item_effacer);
fichier.add(item_quitter);
edition.add(forme_pointeur);
edition.addSeparator();
edition.add(couleur_pointeur);
aPropos.add(aProposItem);
forme_pointeur.add(item2_rond);
forme_pointeur.add(item2_carre);
couleur_pointeur.add(item2_rouge);
couleur_pointeur.add(item2_vert);
couleur_pointeur.add(item2_bleu);
fichier.setMnemonic('F');
edition.setMnemonic('E');
aPropos.setMnemonic('P');
this.add(fichier);
this.add(edition);
this.add(aPropos);
System.out.println("Je suis une barre de menu");
}
}
Voila, sauf que je ne comprend pas du tout ce qu'il se passe, il m'affiche exactement ce que je veux qu'il m'affiche (ma page blanche avec juste mon menu tout beau)... 1 fois sur 5 dans le meilleur des cas !
Mes questions donc :
Est-ce que cette façon de faire est valide ?
Pourquoi mon code réagit-il de cette manière ? (et comment le corriger bien sur xD)
Mes excuses par avance si j'ai fait un truc innommable, la POO reste encore obscure à mes yeux ^^'
Simplement, essaye de mettre le setVisible(true) après le setJMenuBar(new BarreMenu()) ça devrait aller. En gros, c'est parce que swing affiche ta fenêtre avant que le menu soit ajouté.
En fait, l'orienté objet consiste à implémenter et à utiliser des objets qui soient réutilisables. Je doute que tu te resserves de ta barre de menu très souvent...
Néanmoins, c'est une démarche possible car elle rend ton code plus structuré et sans doute plus "digeste" comme tu dis. Personnellement, je trouve cela valable.
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.