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 :

Problème avec ajout d'un sous-menu


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut Problème avec ajout d'un sous-menu
    Bonjour à tous !

    Je me joins à vous car là je colle et je n'arrive pas à trouver la solution.

    Explication :
    J'ai plusieurs menus dans lesquels je peux via la commande "add" qui est un sous-menu de ceux-ci ajouter un nouveau sous-menu ... je sais pas si j'ai réussi à être claire ?
    Je vous joins une image qui représente mon interface et mes différents menus et dessous celle-ci mon code.

    Le problème :
    Dès que j'ajoute via la boite de dialogue un cuisinier, il m'est impossible ré-invoquer celle-ci via le bouton "add" ... Je ne comprend pas pourquoi ?

    En complément :
    Lorsque je clique sur l'un des sous-menu (un cuisinier) celui-ci doit afficher une boite de dialogue me demandant si je veux le supprimer et si oui, je le retire du menu en question.

    Je vous remercie d'avance à tous !

    Nom : azerty.jpg
Affichages : 119
Taille : 25,1 Ko


    Mon code :
    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
     
    private void createAndPlaceComponents() {
    		menuBar = new JMenuBar(); 
     
    		/** différents menus */
    		menuCuisinier = new JMenu("Cuisinier");
     
    		/** MENU CUISINIER */
    		addCuisinier = new JMenuItem("add");
    		addCuisinier.addActionListener(this);
    		menuCuisinier.add(addCuisinier);		
    		menuCuisinier.addSeparator();
     
    		/** Ajouter les menu sur la bar de menu */
    		menuBar.add(menuCuisinier);
     
    		/** Ajout de la barre de menu dans la frame */
    		frame.setJMenuBar(menuBar);
    }
     
    public void actionPerformed (ActionEvent e) {
                    /** AJOUT D'UN CUISINIER */
    		if(e.getSource() == addCuisinier && e.getActionCommand() == "add"){
     
    		    String NomCuisinier = JOptionPane.showInputDialog(null, "Entrer le nom du cuisinier", "");
     
    		    if( NomCuisinier != null){
     
    		    	addCuisinier = new JMenuItem(NomCuisinier);
    		    	addCuisinier.addActionListener(this);
    				menuCuisinier.add(addCuisinier);				
    				textArea.append(NomCuisinier + " prend son service !" + "\n");
    		    }
    		}
    }

  2. #2
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    		if(e.getSource() == addCuisinier && e.getActionCommand() == "add"){
     
    		    String NomCuisinier = JOptionPane.showInputDialog(null, "Entrer le nom du cuisinier", "");
     
    		    if( NomCuisinier != null){
     
    		    	addCuisinier = new JMenuItem(NomCuisinier);
    Tu teste que la source est égale à addCuisinier, mais plus loin dans le code tu remplace addCuisinier par le nouveau cuisinier => Le test ne marchera plus.


    Autre remarque, évite d'avoir un actionListener = this qui fais tout le boulot, ça va vite être complexe à réaliser. Tu peux faire plus simple 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
    private void createAndPlaceComponents() {
    		menuBar = new JMenuBar(); 
     
    		/** différents menus */
    		menuCuisinier = new JMenu("Cuisinier");
     
    		/** MENU CUISINIER */
    		addCuisinier = new JMenuItem("add");
    		addCuisinier.addActionListener((e) -> ajouterUnCuisinier(e));
    		menuCuisinier.add(addCuisinier);		
    		menuCuisinier.addSeparator();
     
    		/** Ajouter les menu sur la bar de menu */
    		menuBar.add(menuCuisinier);
     
    		/** Ajout de la barre de menu dans la frame */
    		frame.setJMenuBar(menuBar);
    }
     
    public void ajouterUnCuisinier (ActionEvent e) {
     
    		    String NomCuisinier = JOptionPane.showInputDialog(null, "Entrer le nom du cuisinier", "");
     
    		    if( NomCuisinier != null){
     
    		    	addCuisinier = new JMenuItem(NomCuisinier);
    		    	addCuisinier.addActionListener((e)-> supprimerCuisinier(e));
    				menuCuisinier.add(addCuisinier);				
    				textArea.append(NomCuisinier + " prend son service !" + "\n");
    		    }
    }
    public void supprimerCuisinier(ActionEvent e) {
          //.....
    }

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut
    Merci de ta réponse tchize_ !

    Je n'arrive pas à comprendre le morceau de ton programme suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    addCuisinier.addActionListener((e)-> supprimerCuisinier(e));
    .

    Pour tout t'avouer je débute en java donc c'est un peux compliquer pour moi.

    Merci d'avance.

  4. #4
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    C'est une lambda expression. C'est l'équivalent de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    addCuisinier.addActionListener(new ActionListener() {
       public void actionPerformed (ActionEvent e) {
           supprimerCuisinier(e);
       }
    });
    en beaucoup moins verbeux.

    Qui lui même est l'équivalent, en moins verbeux de [CODE]
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    addCuisinier.addActionListener(new RetirerCuisinierActionListener());
     
    //....
    public class RetirerCuisinierActionListener {
       public void actionPerformed (ActionEvent e) {
           supprimerCuisinier(e);
       }
    }

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2008
    Messages
    256
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 256
    Points : 85
    Points
    85
    Par défaut
    Bonjour tchize_,

    J'y suis presque, maintenant le soucis c'est que lorsque je clique de nouveau sur le bouton"add" il ne se passe rien.
    Pour la suppression c'est ok (enfin du moins je pense).

    Je te joins mon code pour que tu puisses analyser mon erreur.


    En attendant merci d'avance.

    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
     
    	public void actionPerformed (ActionEvent e) {
     
    		/** AJOUT D'UN CUISINIER */
    		if(e.getSource() == addCuisinier && e.getActionCommand() == "add"){
     
    		    String NomCuisinier = JOptionPane.showInputDialog(null, "Entrer le nom du cuisinier", "");
     
    		    if( NomCuisinier != null){
     
    		    	addCuisinier = new JMenuItem(NomCuisinier);
    		    	addCuisinier.addActionListener(new RetirerCuisinierActionListener());
    			menuCuisinier.add(addCuisinier);				
    			textArea.append(NomCuisinier + " prend son service !" + "\n");
    		    }
    		}
    	}
     
     
    	public class RetirerCuisinierActionListener implements ActionListener {
    	   public void actionPerformed (ActionEvent e) {
    	       supprimerCuisinier(e);
    	   }
    	}
     
    	public void supprimerCuisinier(ActionEvent e) {
    		menuCuisinier.remove(addCuisinier);
    	}

Discussions similaires

  1. Problème avec une requete SQL sous access
    Par Luther13 dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 14/12/2005, 10h39
  2. Problème avec la librairie rfunc sous Firebird
    Par yayelix dans le forum SQL
    Réponses: 4
    Dernier message: 17/05/2005, 16h49
  3. problème avec une page web sous firefox!
    Par 3psilOn dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 24/11/2004, 11h49
  4. Problème avec le port série sous Windows XP
    Par didou2dek dans le forum Composants VCL
    Réponses: 6
    Dernier message: 02/09/2003, 19h50

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