Utiliser ActionListener en dehors la classe ou il est implémenté [Résolu]

Messages postés
37
Date d'inscription
vendredi 14 mars 2008
Dernière intervention
27 mai 2013
- - Dernière réponse : deli2025
Messages postés
37
Date d'inscription
vendredi 14 mars 2008
Dernière intervention
27 mai 2013
- 23 août 2012 à 13:15
Bonjour, je suis débutant en Java et j'ai encore du mal avec la POO...

J'ai un programme qui ce compose comme ceci :

- Class MonProgramme (main)
- Class Fenetre
- Class Container
- Class Menu

Pour l'instant, je gère les action du menu dans la Class Menu mais je souhaiterais le faire dans la Class MonProgramme...

Voici le code de ma Class Menu :

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;

/**
 *
 * @author d3l1
 */
public class Menu extends JMenuBar implements ActionListener
{
    private JMenuBar  menu        = new JMenuBar();
    private JMenu     fichier     = new JMenu("Fichier");
    private JMenuItem nouveau     = new JMenuItem("Nouveau");
    private JMenuItem charger     = new JMenuItem("Charger");
    private JMenuItem sauvegarder = new JMenuItem("Sauvegarder");
    private JMenuItem quitter     = new JMenuItem("Quitter");
    
    private JMenu     parametres  = new JMenu("Paramètres");   
    private JMenuItem pause       = new JMenuItem("Pause");
    private JMenuItem reprendre   = new JMenuItem("Reprendre");
    private JMenuItem resolution  = new JMenuItem("Résolution");
            
    private JMenu     aide        = new JMenu("Aide");   
    private JMenuItem manuel      = new JMenuItem("Manuel");
    private JMenuItem apropos     = new JMenuItem("À propos");
    
    public Menu()
    {
        /*
         *  Ajout des éléments du menu
         */
        this.menu.add(fichier);
        this.menu.add(parametres);
        this.menu.add(aide);
        
        /*
         *  Ajout des éléments de l'onglet fichier
         */
        this.fichier.add(nouveau);
        this.fichier.add(charger);
        this.fichier.add(sauvegarder);
        this.fichier.add(quitter);
        
        this.parametres.add(pause);
        this.parametres.add(reprendre);
        this.parametres.add(resolution);
        
        this.aide.add(manuel);
        this.aide.add(apropos);
        
        /*
         *  Ajout du menu
         */
        this.menu.add(fichier);
        this.menu.add(parametres);
        this.menu.add(aide); 
        
        /*
         * Active l'écoute des onglets
         */ 
        this.nouveau.addActionListener(this);
        this.charger.addActionListener(this);
        this.sauvegarder.addActionListener(this);
        this.quitter.addActionListener(this);
        
        this.pause.addActionListener(this);
        this.reprendre.addActionListener(this);
        this.resolution.addActionListener(this);

        this.manuel.addActionListener(this);
        this.apropos.addActionListener(this);
    }
    
    public JMenuBar getMenuBar() 
    {
        return menu;
    }

    @Override
    public void actionPerformed(ActionEvent e) 
    {
        Object source = e.getSource();
        
        /*
         * Onglet Fichier
         */
        if(source == nouveau)
        {
            System.out.println("Action de l'onglet : Nouveau");
        }
        if(source == charger)
        {
            System.out.println("Action de l'onglet : Charger");
        }
        if(source == sauvegarder)
        {
            System.out.println("Action de l'onglet : Sauvegarder");
        }
        if(source == quitter)
        {
            System.exit(0);    
        }
        
         /*
         * Onglet Paramètres
         */
        if(source == pause)
        {
            System.out.println("Action de l'onglet : Pause");
        }
        if(source == reprendre)
        {
            System.out.println("Action de l'onglet : Reprendre");
        }
        if(source == resolution)
        {
            System.out.println("Action de l'onglet : Résolution");
        }
        
         /*
         * Onglet Aide
         */
        if(source == manuel)
        {
            System.out.println("Action de l'onglet : Manuel");
        }
        if(source == apropos)
        {
            System.out.println("Action de l'onglet : A propos");
        }
    }
    
}


Et voici le code de la Class MonProgramme :
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package cossacks;

/**
 *
 * @author d3l1
 */
public class Cossacks
{   
    private Fenetre fenetre      = new Fenetre();
    private Container container  = new Container();
    private Menu menu            = new Menu();
    
    public Cossacks()
    {
        fenetre.setContentPane(container);
        fenetre.setJMenuBar(menu);
        fenetre.setJMenuBar(menu.getMenuBar());
        fenetre.setVisible(true);
    }

    public static void main(String[] args) 
    { 
        new Cossacks();
    } 
}



J'ai essayer d'implémenter ActionListener ou item dans cette classe mais rien n'y fait...

Si quelqu'un pouvais m'éclairer sur la manière d'y parvenir... J'apprécierais.
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
6450
Date d'inscription
mardi 8 mars 2005
Dernière intervention
17 mai 2018
3
Merci
Salut,

C'est toujours une très mauvaise idée d'implémenter un actionListener dans la classe où il est utilisé. Ca t'oblige à récupérer la source et à faire une suite de if(source.equals(bouton)...

Le mieux est de créer une nouvelle classe
public class PauseListener implements ActionListener {

   public PauseListener(){
      super();
   }

   @Override
   public void actionPerformed(ActionEvent e){
      System.out.println("Action de l'onglet : Pause");
   }

}

public class NouveauListener implements ActionListener {

   public NouveauListener (){
      super();
   }

   @Override
   public void actionPerformed(ActionEvent e){
      System.out.println("Action de l'onglet : Nouveau");
   }

}


Tu fais ca pour toutes tes actions et au lieu de faire :
this.nouveau.addActionListener(this);

tu fais :
this.nouveau.addActionListener(new NouveauListener());


Et de cette manière, tu peux utiliser à deux endroits le même listener.

Si tu utilises un menu, je te conseil d'affecter tous tes listener au menu et ensuite, quand tu créé un bouton de lui donner le modele de ton menuitem :
bouton.setModel(menuItem.getModel()); 

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 104 internautes ce mois-ci

Commenter la réponse de cs_Julien39
Messages postés
37
Date d'inscription
vendredi 14 mars 2008
Dernière intervention
27 mai 2013
0
Merci
Merci
Commenter la réponse de deli2025

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.