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

AWT/Swing Java Discussion :

Intégrer menu commun dans mlusieurs fenêtres


Sujet :

AWT/Swing Java

  1. #1
    Membre averti
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 502
    Points : 300
    Points
    300
    Par défaut Intégrer menu commun dans mlusieurs fenêtres
    Bonjour,

    Je cherche à intégrer un menu commun à plusieurs fenêtres que je créérai dans une petite appli.
    J'ai crée le menu qui s'affiche bien lorsque je le mets "en dur" dans une fenêtre comme ceci :

    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
     
    public class MainMenu extends JFrame {
     
     
    		JMenuBar menuBar = new JMenuBar();
    		  JMenu test1 = new JMenu("Fichier");
    		  JMenu test1_2 = new JMenu("Sous ficher");
    		  JMenu test2 = new JMenu("Edition");
     
    		  JMenuItem item1 = new JMenuItem("Ouvrir");
    		  JMenuItem item2 = new JMenuItem("Fermer");
    		  JMenuItem item3 = new JMenuItem("Lancer");
    		  JMenuItem item4 = new JMenuItem("Arrêter");
     
    		  test1.add(item1);
     
     
    	    test1.add(test1_2);
     
    	    item2.addActionListener(new ActionListener(){
     
    	      public void actionPerformed(ActionEvent e) {
    	       //action à faire
    	      }        
    	    });
    	    test1.add(item2);  
    	    test2.add(item3);
    	    test2.add(item4);
     
     
    	    menuBar.add(test2);
    	    setJMenuBar(menuBar);
    	    setVisible(true);
    	}
    }
    Mais lorsque je mets ce meme code dans une méthode dédiée à la création du menu et que je l'appelle comme ceci pour générer une autre fenêtre, ça m'affiche une fenêtre vide avec à coté une barre de menu hors de la fenêtre.
    Ma question est : comment fixer convenablement la barre de mon menu sur le top de la fenêtre ?

    Code qui ne fontionne pas :

    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
     
    public class MainWindows extends JFrame{
     
    	public MainWindows(){
    		build();
    	}
     
    	private void build(){
    		setTitle("Ma première fenêtre");
    		setSize(600, 800); 
    		setLocationRelativeTo(null); 
    		setResizable(true); //
    		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    		setContentPane(buildContentPane());
    	}
     
    	public JPanel buildContentPane(){
    		panel = new JPanel();
     
    		MainMenu mMenu = new MainMenu();//class MainMenu dédiée à la création du menu
    		mMenu.createMenu();//createMenu contient le code montré ci dessus
     
    		return panel;
    	}
    }
    Merci

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Il manque quelque chose dans ton premier code. La signature d'une méthode, au moins, parce que le code que tu montres ne pourra pas compiler en l'état.
    Je vais supposer que c'est la signature de la méthode createMenu().

    setJMenuBar(menuBar); dans MainMenu affecte le menu à la fenêtre créée et affichée lorsqu'on fait new MainMenu().

    Il n'y aucune raison que ce menu s'affiche dans une fenêtre créée par new MainWindows à l'invocation de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    MainMenu mMenu = new MainMenu();//class MainMenu dédiée à la création du menu
    mMenu.createMenu();//createMenu contient le code montré ci dessus
    Le menu créé par mMenu.createMenu() reste affecté à la fenêtre référencée par mMenu qui s'affiche à part (tu as 2 instances de JFrame).

    1. Soit, tu procèdes par méthode utilitaire, dont le but est de créer le menu

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      public class Utils {
       
          public static JMenuBar createMenu() {
       
              JMenuBar menuBar = new JMenuBar();
       
              /* ... */
       
              return menuBar;
       
          }
       
      }
      Et tu l'invoques dans chaque "fenêtre" :

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      public class MainMenu extends JFrame  {
          public MainMenu() {
                 setJMenuBar(Utils.createMenu());
          }
      }
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      public class MainWindows extends JFrame  {
          public MainWindows() {
                 setJMenuBar(Utils.createMenu());
          }
      }
    2. On peut même passer la JFrame en paramètre
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      public class Utils {
       
          public static void createMenu(JFrame frame) {
       
              JMenuBar menuBar = new JMenuBar();
       
              /* ... */
       
              frame.setJMenuBar(menuBar);
       
          }
       
      }
      Et
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      public class MainMenu extends JFrame  {
          public MainMenu() {
                 Utils.createMenu(this);
          }
      }
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      public class MainWindows extends JFrame  {
          public MainWindows() {
                 Utils.createMenu(this);
          }
      }
    3. Soit tu procèdes par extension

      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
      public class FrameAvecMenu extends JFrame {
       
          public FrameAvecMenu() {
              createMenu();
          }
       
          protected void createMenu() {
       
              JMenuBar menuBar = new JMenuBar();
       
              /* ... */
       
              setJMenuBar(menuBar);
       
          }
       
      }
      Et
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      public class MainMenu extends FrameAvecMenu {
          public MainMenu() {
          }
      }
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      public class MainWindows extends FrameAvecMenu  {
          public MainWindows() {
          }
      }
    4. Soit au lieu d'avoir plusieurs JFrame qui ont le même menu (pas au sens de la même instance, mais au sens du point de vue de l'UI), tu utilises des JInternalFrame avec une fenêtre principale qui a un menu unique (comme ce que fait un Words, un Excel, un Eclipse, un NetBeans, etc...)

    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre averti
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 502
    Points : 300
    Points
    300
    Par défaut
    Merci Joël, tu m'as dépanné une fois de plus.

    En effet le code de la première partie était appelé par un static void main. J'essaierai d'être plus explicite dans mes formulations

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

Discussions similaires

  1. Intégrer un logiciel dans une fenêtre
    Par Le chti dans le forum Sharpdevelop
    Réponses: 0
    Dernier message: 21/02/2019, 11h16
  2. Liste des communes dans la fenêtre de l'API Geoportail
    Par daniel.m dans le forum IGN API Géoportail
    Réponses: 2
    Dernier message: 28/01/2014, 16h44
  3. Comment afficher des JPanels dans ma fenêtre principale JFrame en fonction du menu choisi?
    Par methodman225 dans le forum Agents de placement/Fenêtres
    Réponses: 5
    Dernier message: 22/08/2010, 01h40
  4. Menu déroulant+longueur dans la fenêtre
    Par DelphLaga dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 13/09/2006, 10h09
  5. [Free Pascal] Intégrer des valeurs dans un menu dynamique
    Par boullery dans le forum Free Pascal
    Réponses: 16
    Dernier message: 30/03/2005, 18h04

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