Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de débutant

résultat aléatoire JMenuBar

Sujet résolu
    8 février 2012 à 0:08:15

    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 ^^'

    Merci beaucoup !
    • Partager sur Facebook
    • Partager sur Twitter
      8 février 2012 à 0:16:39

      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é.
      • Partager sur Facebook
      • Partager sur Twitter
        8 février 2012 à 0:21:48

        Bon OK, au moins c'était rapide xD
        Merci beaucoup ^^ !

        Et concernant la validité de la manœuvre ?
        Vaut-il mieux tout sortir en petits objets ou tout regrouper comme cysboy ?
        • Partager sur Facebook
        • Partager sur Twitter
          8 février 2012 à 0:27:03

          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.
          • Partager sur Facebook
          • Partager sur Twitter
            8 février 2012 à 0:32:51

            D'accord, je comprend le principe, merci beaucoup Cevantime !
            Sujet résolu
            • Partager sur Facebook
            • Partager sur Twitter

            Problème de débutant

            × 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.
            • Editeur
            • Markdown