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 :

[AWT] Gestion de plusieurs évènements


Sujet :

AWT/Swing Java

  1. #1
    Membre régulier Avatar de Nadd
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    160
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 160
    Points : 95
    Points
    95
    Par défaut [AWT] Gestion de plusieurs évènements
    Bonsoir,
    Je débute actuellement en Java (même si je possède plusieurs acquis en POO, notamment avec DotNET) et je me pose un certain nombre de questions quant aux diverses possibilités d'utilisation de la gestion des évènements avec AWT.

    Je débute donc par créer ma fenêtre principale à laquelle j'ajoute divers menus et éventuellement plusieurs boutons. J'aimerais ensuite associer à ces divers composants un Listener. Je sais que s'offre à moi la possibilité d'utiliser soit les Classes Anonymes, léger et efficace, soit de créer une classe pour chaque composant, lourd et non-utilisé je suppose, ou encore d'implémenter l'interface ActionListener à ma classe JFrame.

    Exemple :

    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
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    public class MainFrame extends JFrame implements ActionListener {
     
    	/**
             * Constructor.
             */
    	public MainFrame() {
     
    		InitializeComponent();
    	}
     
    	private void InitializeComponent() {
     
    		desktop = new JDesktopPane();
    		menuBar = new JMenuBar();
    		fileMenu = new JMenu("Fichier");
    		helpMenu = new JMenu("?");
    		exitMenuItem = new JMenuItem("Quitter");
    		aboutMenuItem = new JMenuItem("A propos...");
     
    		menuBar.add(fileMenu);
    		menuBar.add(helpMenu);
     
    		fileMenu.add(exitMenuItem);
    		helpMenu.add(aboutMenuItem);
     
    		setTitle("Javare");
    		setSize(DEFAULT_DIMENSION);
    		setExtendedState(JFrame.MAXIMIZED_BOTH);
    		setJMenuBar(menuBar);
    		add(desktop, BorderLayout.CENTER);
     
    		exitMenuItem.addActionListener(this);
    	}
     
    	public void actionPerformed(ActionEvent e) {
     
    		if(e.getSource() == exitMenuItem)
    		{
    			System.exit(0);
    		}
    	}
     
    	/**
             * Fields.
             */
    	private JDesktopPane desktop;
    	private JMenuBar menuBar;
    	private JMenu fileMenu;
    	private JMenu helpMenu;
    	private JMenuItem exitMenuItem;
    	private JMenuItem aboutMenuItem;
     
    	private static final long serialVersionUID = 0L;
    	private static final Dimension DEFAULT_DIMENSION = new Dimension(500,500);
    }
    Ma question est la suivante :

    Imaginons que je dispose 500 composants dans ma fenêtre et que pour chaque évènement le programme doive comparer, un à un, l'objet e.getSource() avec les composants de ma fenêtre, cette méthode ne serait-elle pas un peu lourde (même si avec les config. le problème ne se pose pas) d'un point vue "lisibilité" et d'un point de vue "perfomance" ?

    Quelles sont les alternatives (mis à part l'utilisation des classes internes anonymes qui, pour un certain nombre de composants, rendraient le code totalement illisible) à l'utilisation d'une seule fonction actionPerfomed montrer ci-dessus ? Quelles sont les conseils que vous me donneriez ?

    En vous remerciant d'avance,

    Nadd.

  2. #2
    Membre éclairé Avatar de bassim
    Homme Profil pro
    Ingénieur Réseaux
    Inscrit en
    Février 2005
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2005
    Messages : 666
    Points : 695
    Points
    695
    Par défaut
    la solution c'est de créer une classe "evenement" pour chaque composant (ou groupe de composants) comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class MenuEvent implements ActionListener {
     
    public void actionPerformed(ActionEvent e) {
     
     
    			// ton code
    	}
    }
    et ensuite ajouter le listener à ton composant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    exitMenuItem.addActionListener(new MenuEvent());
    et ça sera la meme chose pour d'autres types de composants :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    boutonOk.addActionListener(new BoutonOkEvent());
    boutonAnnuler.addActionListener(new BoutonAnnulerEvent());
    ou bien rassembler les deux evenements dans une seule classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ActionListener boutonEvent = new BoutonEvent();
    boutonOk.addActionListener(boutonEvent );
    boutonAnnuler.addActionListener(boutonEvent );
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public class BoutonEvent implements Actionlistener {
    public void actionPerformed(ActionEvent e) {
     
    		if  (JButton)(e.getSource().getActionCommande().equals("ok") ){
                 // code
    }
    			// la meme chose pour l'autre bouton
    	}
    }
    Where is my mind

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

Discussions similaires

  1. Gestion de plusieurs langues
    Par emardjean dans le forum Langage
    Réponses: 2
    Dernier message: 09/04/2006, 18h50
  2. Pour Caféine - gestion de plusieurs photos
    Par le géologue dans le forum Access
    Réponses: 1
    Dernier message: 16/03/2006, 19h08
  3. Gestion de plusieurs couches d'affichage
    Par esteban63 dans le forum Windows
    Réponses: 2
    Dernier message: 08/03/2006, 21h21
  4. [FLASH MX] Gestion de Plusieurs Clips Identiques
    Par Darkdaemons dans le forum Flash
    Réponses: 2
    Dernier message: 18/01/2006, 19h06
  5. Réponses: 8
    Dernier message: 06/07/2004, 14h17

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