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

deli2025 37 Messages postés vendredi 14 mars 2008Date d'inscription 27 mai 2013 Dernière intervention - 23 août 2012 à 11:14 - Dernière réponse : deli2025 37 Messages postés vendredi 14 mars 2008Date d'inscription 27 mai 2013 Dernière intervention
- 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
cs_Julien39 6450 Messages postés mardi 8 mars 2005Date d'inscription 17 mai 2018 Dernière intervention - 23 août 2012 à 11:31
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()); 

Merci cs_Julien39 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 125 internautes ce mois-ci

Commenter la réponse de cs_Julien39
deli2025 37 Messages postés vendredi 14 mars 2008Date d'inscription 27 mai 2013 Dernière intervention - 23 août 2012 à 13:15
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.