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

Agents de placement/Fenêtres Java Discussion :

[AddActionListener] Création classe Menu


Sujet :

Agents de placement/Fenêtres Java

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 231
    Par défaut [AddActionListener] Création classe Menu
    Bonjour,

    J'essaie de faire une classe Menu, qui propose la construction de Menu pour une fenetre Swing.

    Je l'instancie , je le crée tout va bien. Mais Dans ma classe graphique qui sert à la construction de la fenetre , je ne peux créer les AddActionListener, comme d'habitude car il ne connait pas les sources.

    Je vous poste le code:

    classe Menu
    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
    public class Menu {
    	protected JMenuBar barreMenus;
    	protected  JMenu menu;
    	protected JMenuItem ssMenu;
    	Menu(){
    		//creations de la barre de menus
    		barreMenus = new JMenuBar();
    	}
    	public void ajoutMenu(String nom){
     
    		menu =new JMenu(nom);
    		barreMenus.add(menu);
    	}
    	public void ajoutSsMenu(String nom){
    		 ssMenu = new JMenuItem(nom);
    		menu.add(ssMenu);
    	}
    	public JMenuItem getSsMenu(){
    		return ssMenu;
    	}
    }
    méthode de la classe grpahique qui construit 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
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    //*****************************************************
    	//**Création des menus**
    	//*****************************************************
    	public void setMenu(){
    		//on instancie un menu
    		Menu menu=new Menu();
    		//on accroche la barres des menus à la fenetre
    		setJMenuBar(menu.barreMenus);
     
    		//on cree le menu Fichier et ses sous menus avec des ecouteurs
    		menu.ajoutMenu("Fichier");
    		menu.ajoutSsMenu("Quitter");
    		menu.getSsMenu().addActionListener(this);
     
    		//on cree le menu options et ses sous menus avec des ecouteurs
    		menu.ajoutMenu("Options");
     
    		//on cree le menu Aide et ses sous menus avec des ecouteurs
    		menu.ajoutMenu("?");
    		menu.ajoutSsMenu("About");
    		menu.getSsMenu().addActionListener(this);
    		menu.ajoutSsMenu("Aide");
    		menu.getSsMenu().addActionListener(this);
    		menu.ajoutSsMenu("Notice");
    		menu.getSsMenu().addActionListener(this);
    	}
    la on voit bien que je peux ajouter les addActionListener.

    Mais maintenant , je veux redéfinir les ActionPerformed, mais je ne trouve pas ce que je dois mettre en source ???
    je vous montre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    public void actionPerformed(ActionEvent e) {
    		//on verifie la source
    		if(e.getSource()==?????){
    			System.exit(0);
    		}
    Pourriez m'aider à définir ce que je dois mettre en source, par exemple pour le menu quitter?????

    Merci

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Par défaut
    Juste pour mieux comprendre ce que tu cherches à faire, en fait, tu veux lancer une application avec un JMenu et quand tu clic sur ce JMenu, çà exécute setMenu() qui va recréer un JMenu.

    Le truc c'est que ton code ajoute des JMenuItem qui n'ont pas de nom puisque tu utilises ssMenu à chaque fois que tu ajoutes un JMenuItem.
    Cà te permet en effet de créer dynamiquement un menu mais cela t'empêche de lui spécifier quelque chose qui lui est propre selon son utilisation métier puisque par essence même, il est générique donc tu ne le connais pas à l'avance!!

    Idéalement, il te faudrait une bibliothèque de JMenuItem que tu ajouterais au fur et à mesure de tes besoins a tes JMenu custom. Un peu comme fonctionne les petites icônes des barres de menu des applications classique. Chacune d'elle étant indépendante d'un quelconque menu et parfaitement fonctionnelle.

    De cette façon tu pourra définir un JMenuItemQuit, JMenuItemAbout, JMenuItemFile, etc... et leur allouer un comportement qui leur est propre!

    Tu peux les ranger dans une HashMap<String, JMenuItem> de ton application et faire un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void ajoutSsMenu(String key){
      menu.add(hashMapJMenuList.get(key));
    }

  3. #3
    Membre Expert
    Avatar de gifffftane
    Profil pro
    Inscrit en
    Février 2007
    Messages
    2 354
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 2 354
    Par défaut
    Si tu procèdes ainsi, il faut que tu conserves, d'une façon ou d'une autre, la référence à ton sous-menu Quitter, de façon à pouvoir faire if (e.getSource() == ssMenuQuitter).

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 231
    Par défaut
    Citation Envoyé par MichaelBW Voir le message
    Juste pour mieux comprendre ce que tu cherches à faire, en fait, tu veux lancer une application avec un JMenu et quand tu clic sur ce JMenu, çà exécute setMenu() qui va recréer un JMenu.

    Le truc c'est que ton code ajoute des JMenuItem qui n'ont pas de nom puisque tu utilises ssMenu à chaque fois que tu ajoutes un JMenuItem.
    Cà te permet en effet de créer dynamiquement un menu mais cela t'empêche de lui spécifier quelque chose qui lui est propre selon son utilisation métier puisque par essence même, il est générique donc tu ne le connais pas à l'avance!!

    Idéalement, il te faudrait une bibliothèque de JMenuItem que tu ajouterais au fur et à mesure de tes besoins a tes JMenu custom. Un peu comme fonctionne les petites icônes des barres de menu des applications classique. Chacune d'elle étant indépendante d'un quelconque menu et parfaitement fonctionnelle.

    De cette façon tu pourra définir un JMenuItemQuit, JMenuItemAbout, JMenuItemFile, etc... et leur allouer un comportement qui leur est propre!

    Tu peux les ranger dans une HashMap<String, JMenuItem> de ton application et faire un truc du style :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    public void ajoutSsMenu(String key){
      menu.add(hashMapJMenuList.get(key));
    }
    Ca m'a l'air compliqué pour mon niveau

    En fait ma classe graphique instancie ma classe menu. dans ma classe menu, je crée une barres des menus. j ajoute des sous menus grace à des méthodes .
    Le probleme c 'est que je n'ai pas la source.

    J'ai pas tout compris dans ta méthode mais je vais me renseigner sur ce que tu m'as donné.

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    64
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 64
    Par défaut
    Ok, je vais essayer de faire un peu plus simple et clair

    Quand tu écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    public void ajoutSsMenu(String nom){
      ssMenu = new JMenuItem(nom);
      menu.add(ssMenu);
    }
    Si tu appelles cette méthode 2 fois d'affilé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    menu.ajoutSsMenu("About");
    menu.ajoutSsMenu("Aide");
    Que vaut ssMenu? Il vaut l'instance JMenuItem qui porte le label "Aide".
    Mais comment retrouver l'instance de JMenuItem qui porte le label "About" que tu as mise juste avant?

    Y a moyen en allant chercher la liste des JMenuItem du JMenu et de les regarder un par un. Mais "About" reste un simple texte. Le programmeur qui le lit le comprend, mais pas ton code. Pour lui çà pourrait être aussi bien "Quitter" çà ne changerais rien. Donc tu devra lui apprendre que :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if (leLabel est "Quitter") alors 
    reagitCommeQuitter();
    Ce qui va te faire autant de if que de possibilité.

    Donc ce que je te proposes de faire c'est de créer à l'avance des objets de type JMenuItem :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    JMenuItem miQuitter = new JMenuItem("Quitter");
    JMenuItem miAbout = new JMenuItem("About");
    JMenuItem miAide = new JMenuItem("Aide");
    De cette façon tu pourras redéfinir actionPerformed spécifiquement pour chaque JMenuItem déclaré.

    Dans ton code tu veux utiliser une méthode addSsMenu(String nom), donc pour ne pas changer çà je te conseil de garder tous tes JMenuItem déclaré préceddemment dans une HashMap qui est une collection d'objet qui enregistre une clé (une chaine de caractère en général) pour un objet.

    En gros cette Hashmap référence tous les JMenuItem que tu as de disponible pour créer tes Menu persos à la volée.

    Pour accéder à un élément d'une HashMap tu dois faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maHashMap.get("Quitter");
    Ta HashMap qui contient donc le couple ("Quitter", imQuitter) va te retourner ton JMenuItem imQuitter, et tu pourras donc faire ton menu.add() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    public void ajoutSsMenu(String key){
      menu.add(hashMapJMenuList.get(key));
    }
    J'espère que c'est un peu plus clair

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    231
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 231
    Par défaut
    Ok merci c'est super clair j ai réussi mais j'ai fait une version de ta solution. en proposant d 'ajouter le menu dans la HashMap grace à une méthode développée.

    Merci beaucoup

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

Discussions similaires

  1. Création d'une classe menu à instancier pour la création d'un menu
    Par adissa357 dans le forum Interfaces Graphiques en Java
    Réponses: 6
    Dernier message: 02/12/2013, 16h08
  2. Création de menu déroulant
    Par laurentSc dans le forum Mise en page CSS
    Réponses: 18
    Dernier message: 12/03/2007, 16h58
  3. Création de menu
    Par madness dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 03/05/2006, 23h38
  4. [C#] Pb de création de menu dynamiques
    Par albireo dans le forum Windows Forms
    Réponses: 3
    Dernier message: 21/12/2005, 16h49
  5. [dvd] création de menu
    Par FFF dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 06/08/2005, 09h37

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