IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
logo

FAQ Java GUIConsultez toutes les FAQ

Nombre d'auteurs : 37, nombre de questions : 155, derni�re mise � jour : 10 octobre 2015  Ajouter une question

 

Cette FAQ a �t� r�alis�e � partir des questions fr�quemment pos�es sur les forums de http://www.developpez.com et de l'exp�rience personnelle des auteurs.

Nous tenons � souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne pr�tend pas non plus �tre compl�te. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant r�dacteur, lisez ceci.

SommaireAWT et SwingLes listeners (10)
pr�c�dent sommaire suivant
 

Dans le contexte d'une interface graphique (Swing, AWT, etc.), les listeners permettent au programmeur de r�agir suite aux actions de l'utilisateur (clic de souris, touche du clavier enfonc�e, etc.).

Les � listeners � sont des interfaces. Ces interfaces fournissent une ou plusieurs m�thodes qui peuvent donc �tre impl�ment�es diff�remment selon les cas et les besoins, pour r�pondre aux �v�nements.

Les interfaces � listener � sont pr�sentes principalement dans le package java.awt.event, mais �galement dans le package javax.swing.event.

Chaque listener dispose d'une classe Event associ�e. Cette classe �tend java.awt.event.EventObject et fournit une description de l'�v�nement captur�. Par exemple, la classe ActionEvent d�crit les �v�nements captur�s par un ActionListener.

Il y a plusieurs mani�res d'utiliser les listeners, vous trouverez ces m�thodes dans les Q/R suivantes.

Mis � jour le 26 mai 2007 Janitrix

Voici la pr�sentation et quelques explications sur la premi�re possibilit� concernant l'utilisation des listeners.

1�re possibilit� : impl�mentation de l'interface dans la classe principale.

Code java : S�lectionner tout
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
import java.awt.event.ActionListener;  
  
// �tape 1 : d�claration de la classe  
public class MaClasse implements ActionListener {  
	// �tape 3 : Cr�ation de deux boutons 
	JButton monBouton = new JButton("Mon Bouton");  
	JButton monBouton2 = new JButton("Mon Bouton2");  
  
	public MaClasse() {  
		// �tape 4 : On ajoute � l'�couteur � sur le bouton � monBouton �.  
		monBouton.addActionListener(this);  
		// Puis sur monBouton2 
		monBouton2.addActionListener(this); 
	}  
  
	/* �tape 2 :Cette m�thode est d�clar�e dans l'interface ActionListener. Il nous faut l'impl�menter. */  
	public void actionPerformed(ActionEvent e) {  
                // �tape 2bis 
		if(e.getSource() == monBouton) { 
			// Bouton 1 a �t� cliqu� 
		}else { 
			// Bouton 2 a �t� cliqu� 
		} 
	}  
}
Tout d'abord, � l'�tape 1, nous d�clarons une classe � MaClasse � qui impl�mente l'interface ActionListener (nous l'�tudierons plus en d�tail dans une autre Q/R). Puisque nous impl�mentons l'interface, nous devons �galement impl�menter toutes les m�thodes d�finies dans l'interface.

Le cas de l'interface ActionListener est simple puisqu'elle ne contient qu'une m�thode.

M�thode que nous impl�mentons � l'�tape 2 justement.

Nous cr�ons un bouton Swing � l'�tape 3.

� l'�tape 4, nous ajoutons un � listener � sur les boutons pr�c�demment cr��s. La m�thode addActionListener est d�finie dans la classe AbstractButton, classe parente de JButton. Cette m�thode attend un param�tre de type ActionListener.

La classe MaClasse impl�mente cette interface, elle peut �tre justement consid�r�e comme du type ActionListener. Nous pouvons donc fournir l'op�rateur 'this' en param�tre, qui repr�sente l'instance en cours de la classe MaClasse.

Concr�tement, qu'avons nous fait ? Nous avons demand� aux boutons monBouton et monBouton2 qu'ils nous pr�viennent lorsqu'un utilisateur les actionne (c'est le r�le du � listener � ActionListener en particulier). Et comment ? En utilisant la m�thode actionPerformed, d�finie dans l'interface ActionListener et surcharg�e dans la classe MaClasse.

Nous avons deux boutons, mais une seule m�thode actionPerformed. Nous devons donc diff�rencier (�tape 2bis) la source de l'�v�nement, monBouton ou monBouton2.

La boucle est boucl�e.

Mis � jour le 15 novembre 2008 Janitrix

2�me m�thode : utilisation des classes anonymes.

Une deuxi�me possibilit� est d'utiliser les classes anonymes. Voici quelques explications, toujours avec un code pour l'exemple.

Code java : S�lectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// �tape 1 : d�claration de la classe 
public class MaClasse {  
	// �tape 2 : cr�ation de deux boutons.  
	JButton monBouton = new JButton("Mon Bouton");  
	JButton monBouton2 = new JButton("Mon Bouton 2");  
  
	/* �tape 3 : cr�ation de la  classe anonyme */  
	monBouton.addActionListener(new ActionListener() {  
		public void actionPerformed(ActionEvent e) {  
			// Cette m�thode ne sera appel�e que pour les �v�nements sur le bouton monBouton.  
		}  
	});  
  
	/* On refait la m�me chose pour le deuxi�me bouton */  
	monBouton2.addActionListener(new ActionListener() {  
		public void actionPerformed(ActionEvent e) {  
			// Cette m�thode ne sera appel�e que pour les �v�nements sur le bouton monBouton2.  
		}  
	});  
}
D�s le d�but, nous pouvons remarquer quelques diff�rences avec la premi�re m�thode d'utilisation trait�e pr�c�demment.

Tout d'abord, notre classe MaClasse n'impl�mente pas l'interface ActionListener. Aucune instance de la classe MaClasse ne pourra donc �tre utilis�e dans la m�thode addActionListener.

Nous cr�ons deux boutons � l'�tape 2. L'�tape 3 est la plus int�ressante. Nous d�finissons une instance de l'interface ActionListener dans une classe anonyme, sans garder de r�f�rence vers cette classe anonyme. Dans ce cas, nous devons le faire deux fois, une fois pour chaque bouton (il faut une classe anonyme pour chaque composant d�clenchant un �v�nement).

Un avantage de cette m�thode est un code plus l�ger au niveau de l'impl�mentation des �v�nements. En effet, nous n'avons pas � dissocier les composants � source � (les composants �cout�s par le listener), comme nous le faisons dans la premi�re possibilit�.

En contrepartie, nous devons cr�er une classe anonyme � chaque fois. Une autre possibilit� qui est une simple variante de celle pr�sent�e ici est la suivante :

Code java : S�lectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// �tape 1 : d�claration de la classe 
public class MaClasse {  
	// �tape 2 : cr�ation de deux boutons.  
	JButton monBouton = new JButton("Mon Bouton...");  
	JButton monBouton2 = new JButton("Mon Bouton 2...");  
  
	/* �tape 3 : cr�ation de la  classe anonyme */  
	ActionListener listener = new ActionListener() {  
		public void actionPerformed(ActionEvent e) {  
			if(e.getSource() == monBouton) { 
				// Bouton 1 a �t� cliqu� 
			}else { 
				// Bouton 2 a �t� cliqu� 
			} 
		}  
	}; 
  
	monBouton.addActionListener(listener);  
	monBouton2.addActionListener(listener);  
}
Ce code est fortement similaire au pr�c�dent et m�rite donc peu d'explications. La seule subtilit� est que nous � sauvegardons � l'instance de la classe anonyme dans une variable, et que nous pouvons donc la r�utiliser autant de fois que n�cessaire. Cependant, cette fa�on de faire nous oblige � diff�rencier les composants � source � pour impl�menter un comportement diff�rent selon la source.

Mis � jour le 15 novembre 2008 Janitrix

3�me m�thode : cr�ation d'une classe d�di�e.

Code java : S�lectionner tout
1
2
3
4
5
// Fichier : MonListener.java 
public class MonListener implements ActionListener {  
	public void actionPerformed(ActionEvent e) {  
	}  
}
Et dans votre classe principale :

Code java : S�lectionner tout
monButton.addActionListener(new MonListener());
Cette possibilit� est tr�s simple, il vous suffit d'impl�menter le comportement voulu dans la classe qui impl�mente le listener, puis vous cr�ez une instance de cette classe que vous passez en param�tre de la m�thode addXXXListener situ�e dans votre classe o� sont d�clar�s les composants (boutons, listes, etc.).

Mis � jour le 15 novembre 2008 Janitrix

ActionListener est, comme son nom l'indique, un listener utilis� pour r�agir aux actions utilisateurs. Celles-ci sont multiples, la principale �tant l'activation d'un bouton (par un clic ou par appui de la touche Entr�e lorsque le bouton est s�lectionn�).

Une seule m�thode est d�clar�e dans cette interface : public void actionPerformed(java.awt.event.ActionEvent e).

La classe ActionEvent �tend la classe java.util.EventObject et h�rite donc de ses m�thodes. Parmi elles, getSource() est particuli�rement int�ressante. Elle renvoie l'objet concern� par l'�v�nement (par exemple le bouton qui a �t� cliqu�).

Cela nous permettra de diff�rencier les composants sources dans l'impl�mentation de la m�thode actionPerformed.

La classe ActionEvent fournit quant � elle quelques m�thodes sp�cifiques aux �v�nements d'action. Les plus utilis�es sont getWhen() et getActionCommand().

getWhen() r�cup�re le timestamp Unix marquant le d�clenchement de l'�v�nement, tandis que getActionCommand() retourne le nom de la commande associ�e � l'�v�nement (par exemple, le texte du bouton � l'origine de l'action).

Voici une simple impl�mentation d'un ActionListener, utilisant la premi�re m�thode d'impl�mentation propos�e :

Code java : S�lectionner tout
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
[...] 
import java.awt.event.*; 
  
// �tape 1 : d�claration de la classe  
public class MaClasse implements ActionListener { 
	// �tape 2 : cr�ations des boutons 
	JButton monBouton = new JButton("Un bouton vivant"); 
	JButton monBouton2 = new JButton("Un bouton vivant2"); 
  
	public MaClasse() { 
		// �tape 3 : on ajoute le listener aux boutons 
		monBouton.addActionListener(this); 
		monBouton.addActionListener(this); 
	} 
  
	// �tape 4 : l'impl�mentation de l'ActionListener 
	public void actionPerformed(ActionEvent e) { 
		System.out.println("Un bouton a �t� cliqu�, timestamp : " + e.getWhen()); 
  
		// �tape 5 : diff�renciation de la source d'�v�nement 
		if(e.getSource() == monBouton || e.getActionCommand() == monBouton.getText()) { 
			System.out.println("C'est le bouton 1 !"); 
		}else if(e.getSource() == monBouton2 || e.getActionCommand() == monBouton2.getText()) { 
			System.out.println("C'est le bouton 2 !"); 
		} 
  
	} 
}
Rien de nouveau aux �tapes 1, 2, 3, et 4. Vous aurez compris que lorsque l'un des deux boutons est appuy�, la m�thode actionPerformed est invoqu�e.

Cependant, nous avons deux boutons, et un clic sur chacun d'eux invoquera la m�me impl�mentation de l'ActionListener. Nous devons donc diff�rencier le bouton source de l'action. Cela peut se r�aliser de deux fa�ons : soit on compare le libell� du bouton avec celui de l'action captur�e, soit on compare le bouton et l'objet source de l'�v�nement.

Les deux m�thodes sont pr�sent�es � l'�tape 5. Notez que mettre ces deux tests (comparaison de libell�s et comparaison de sources) dans une m�me condition est superflu, un seul des deux tests est n�cessaire pour savoir quel bouton a �t� actionn�.

Mis � jour le 26 mai 2007 Janitrix

Le KeyListener est utilis� pour r�agir aux �v�nements du clavier, et est donc utilisable sur des composants permettant la saisi de texte (JTextField, JTextArea, etc).

Trois m�thodes sont d�clar�es dans l'interface du KeyListener : keyTyped(KeyEvent e), keyPressed(KeyEvent e) et keyReleased(KeyEvent e). Elle permettent respectivement de r�agir lorsqu'une touche a �t� : tap�e (press�e puis rel�ch�e), press�e, rel�ch�e.

La classe KeyEvent �tend java.util.EventObject et dispose donc des m�thodes d�clar�es dans cette classe (notamment getSource() ), mais fournit �galement une dizaine d'autres m�thodes sp�cifiques aux �v�nements relatifs au clavier. Parmi elles : getKeyChar() retourne le caract�re associ� � la touche appuy�e, getKeyCode() r�cup�re le code de la touche press�e, isActionKey() retourne true si la touche appuy�e est une touche d'action (CAPS LOCK, Verr Num, etc), et getKeyText(int keyCode) retourne le texte associ�e � la touche (par ex. F1, A, etc).

La derni�re m�thode, getKeyText, est statique et ne s'utilise donc pas avec l'instance de KeyEvent fournie.

Les codes retourn�s par la m�thode getKeyCode() sont utiles pour d�terminer la touche press�e.

Voici une simple impl�mentation d'un KeyListener, utilisant la premi�re m�thode d'impl�mentation propos�e :

Code java : S�lectionner tout
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
import java.awt.event.*;  
  
// �tape 1 : on cr�e la classe et on impl�mente KeyListener.  
public class MaClasse implements KeyListener {  
  
	// �tape 2 : on cr�e un composant JTextField  
	private JTextField textField = new JTextField();  
  
	public MaClasse() {  
		// �tape 3 :  on ajoute le listener au composant  
		textField.addKeyListener(this);  
	}  
  
	// �tape 4 : on impl�mente la m�thode keyTyped d�finie dans l'interface KeyListener  
	public void keyTyped(KeyEvent e) {  
		/* Cette m�thode est appel�e quand l'utilisateur appuie sur une touche Unicode (donc les caract�res) et ne prend pas en compte les touches comme F1, Echap, ALT, etc. */  
		System.out.println(e.getKeyChar());  
	}  
  
	// �tape 5: on impl�mente la m�thode keyPressed d�finie dans l'interface KeyListener  
	public void keyPressed(KeyEvent e) {  
		/* Cette m�thode est appel�e quand l'utilisateur appuie sur une touche.  
		Il est conseill� de ne pas utiliser getKeyChar() mais getKeyCode(), car les touches sp�ciales comme F1 ou Echap ne disposent pas d'un �quivalent en Unicode, et donc ne peuvent �tre repr�sent�es en char. */  
	        System.out.println(KeyEvent.getKeyText( e.getKeyCode() );  
		if(e.getKeyCode() == KeyEvent.VK_ESCAPE) {  
			System.out.println("L'utilisateur a appuy� sur Echap");  
		}  
	}  
  
	// �tape 6 : on impl�mente la m�thode keyReleased d�finie dans l'interface KeyListener  
	public void keyReleased(KeyEvent e) {  
		// Le fonctionnement est le m�me que pour keyPressed, sauf que cette m�thode est appel�e quand la touche est rel�ch�e.  
	}  
}
Le code est assez explicite, et les commentaires pr�cisent quelques points obscures. Rien de nouveaux dans ce code, si ce n'est la comparaison entre le code de la touche appuy�e et le code de la touche Echap.

Enfin, sachez que si vous trouvez trop lourd de devoir impl�menter les trois m�thodes alors qu'une seule vous suffit, il existe la classe abstraite java.awt.event.KeyAdapter.

Vous pouvez soit cr�er une classe qui �tendra KeyAdapter, soit faire une classe anonyme.

Exemple :

Code java : S�lectionner tout
1
2
3
4
5
monTextField.addKeyListener( 
		new KeyAdapter() { 
			public void keyTyped(KeyEvent e) { 
			} 
		});

Mis � jour le 26 mai 2007 Janitrix

Le MouseListener est utilis� pour les �v�nements relatifs � la souris (clics, d�placements).

Cinq m�thodes sont d�clar�es dans l'interface MouseListener : mouseClicked(MouseEvent e) pr�vient des clics (la souris a �t� press�e puis rel�ch�e), mousePressed(MouseEvent e) pour les pressions sur la souris (donc on enfonce le bouton sans le rel�cher), mouseReleased(MouseEvent e) pr�vient du rel�chement d'un bouton de la souris, mouseEntered(MouseEvent e) indique que la souris est entr�e dans l'espace d'un composant, mouseExited(MouseEvent e) indique que la souris est sortie de l'espace d'un composant.

La classe MouseEvent �tend java.util.EventObject et dispose donc des m�thodes d�clar�es dans cette classe (notamment getSource() ), mais fournit �galement douze autres m�thodes sp�cifiques aux �v�nements relatifs � la souris, notamment getButton() retourne le bouton qui a �t� cliqu�, getClickCount() retourne le nombre de clics (utile pour g�rer le double clic), getLocationOnScreen() retourne un objet Point repr�sentant la position de la souris � l'�cran, et enfin isPopupTrigger() pr�cise si le bouton cliqu� est celui habituellement utilis� pour afficher la liste d�roulante (bouton droit sur le bureau Windows par exemple).

Voici un exemple d'impl�mentation d'un MouseListener :

Code java : S�lectionner tout
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
public class MaClasse implements MouseListener { 
  
	public void mousePressed(MouseEvent e) { 
		// Cette m�thode est appel�e quand l'utilisateur appuie le bouton sur le composant �cout� 
	} 
  
	public void mouseReleased(MouseEvent e) { 
		// Cette m�thode est appel�e quand l'utilisateur rel�che le bouton sur le composant �cout� 
	} 
  
	public void mouseClicked(MouseEvent e) { 
		// Cette m�thode est appel�e quand l'utilisateur a cliqu� (appuy� puis rel�ch�) sur le composant �cout� 
		if(e.getClickCount() == 2) { 
			System.out.println("Il y a eu un double clic"); 
		} 
  
		Point p = e.getLocationOnScreen(); 
  
		System.out.println("La souris est aux coordonn�es : x=" + p.getX() + ";y=" + p.getY() + " de l'�cran."); 
	} 
  
	public void mouseEntered(MouseEvent e) { 
		// Cette m�thode est appel�e quand la souris entre dans la zone du composant �cout� 
		System.out.println("La souris vient d'entrer..."); 
	} 
  
	public void mouseExited(MouseEvent e) { 
		// Cette m�thode est appel�e quand la souris sort de la zone du composant �cout� 
		System.out.println("La souris vient de sortir... rattrapez l� :)"); 
	} 
}
Il est fort probable que seules quelques-unes de ces m�thodes vous int�ressent, il vous semblera donc lourd d'impl�menter chacune des m�thodes.

Il existe donc une classe abstraite MouseAdapter qui vous permet d'impl�menter seulement les m�thodes qui vous int�ressent.

Exemple :

Code java : S�lectionner tout
1
2
3
4
monPanel.addMouseListener(new MouseAdapter() { 
	public void mouseClicked(MouseEvent e) { 
	} 
}

Mis � jour le 26 mai 2007 Janitrix

Le WindowListener est utilis� pour les �v�nements relatifs aux fen�tres (activation, fermeture, ouverture, etc.).

Cette interface d�clare sept m�thodes : windowActivated(WindowEvent e) indique que la fen�tre a �t� activ�e, windowDeactivated(WindowEvent e) indique que la fen�tre n'est plus la fen�tre active, windowClosed(WindowEvent e) indique que la fen�tre a �t� ferme�, windowClosing(WindowEvent e) indique que l'utilisateur a demand� la fermeture de la fen�tre, windowOpened(WindowEvent e) est appel�e la premi�re fois que la fen�tre est rendue visible, windowIconified(WindowEvent e) indique que la fen�tre a �t� r�duite dans la barre de t�che, windowDeiconified(WindowEvent e) indique que la fen�tre a �t� restaur�e depuis la barre de t�che.

La classe WindowEvent �tend java.util.EventObject et dispose donc des m�thodes d�clar�es dans cette classe (notamment getSource() ), mais fournit �galement cinq autres m�thodes sp�cifiques aux �v�nements relatifs aux fen�tres, notamment getNewState() et getOldState() qui fournissent respectivement le nouvel �tat et l'ancien �tat de la fen�tre, mais aussi getWindow(), qui retourne la fen�tre source de l'�v�nement.

Afin d'ajouter un WindowListener sur une fen�tre, vous disposez de la m�thode addWindowListener(WindowListener) de la classe Window (�tendue par la classe JFrame notamment).

Voici un exemple d'impl�mentation d'un WindowListener :

Code java : S�lectionner tout
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
public class MaClasse implements WindowListener { 
  
	// [...] 
  
        public MaClass() { 
             maFenetre.addWindowListener(this); 
        } 
  
	public void windowOpened(WindowEvent e) { 
		System.out.println("On vient de m'ouvrir !"); 
	} 
  
	public void windowClosed(WindowEvent e) { 
		System.out.println("On m'a ferm� !") 
	} 
	public void windowClosing(WindowEvent e) { 
		System.out.println("On veut me fermer !"); 
	} 
  
	public void windowIconified(WindowEvent e) { 
		System.out.println("Je suis r�duite � une ic�ne !"); 
	} 
  
	public void windowDeiconified(WindowEvent e) { 
		System.out.println("Je suis restaur�e !"); 
	} 
  
	public void windowActivated(WindowEvent e) { 
		System.out.println("Je suis activ�e"); 
	} 
  
	public void windowDeactivated(WindowEvent e) { 
		System.out.println("Je suis d�sactiv�e"); 
	} 
  
}
Les m�thodes sont nombreuses mais bien sp�cifiques. Il existe encore une fois une classe Adapter qui vous permet de n'impl�menter que les m�thodes qui vous int�ressent : WindowAdapter.

Mis � jour le 12 janvier 2008 Janitrix

Le FocusListener est utilis� pour les �v�nements relatifs au focus clavier.

Cette interface d�clare deux m�thodes : focusGained(FocusEvent e) indique que le composant a gagn� le focus clavier tandis que focusLost(FocusEvent e) indique que le composant a perdu le focus clavier.

La classe FocusEvent �tend java.util.EventObject et dispose donc des m�thodes d�clar�es dans cette classe (notamment getSource() ), mais fournit �galement trois autres m�thodes sp�cifiques aux �v�nements relatifs aux fen�tres, notamment isTemporary() qui indique si le composant n'a le focus que temporairement, et getOppositeComponent() qui retourne l'autre composant impliqu� dans le changement de focus.

Afin d'ajouter un FocusListener, vous disposez de la m�thode addFocusListener(FocusListener) de la classe Component.

Voici un exemple d'impl�mentation d'un FocusListener :

Code java : S�lectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
public class MaClasse implements FocusListener { 
     public MaClasse() { 
         monComposant.addFocusListener(this); 
     } 
  
     public void focusGained(FocusEvent e) { 
          System.out.println("On a gagn� le focus"); 
     } 
  
     public void focusLost(FocusEvent e) { 
         System.out.println("On a perdu le focus"); 
     } 
}

Mis � jour le 12 janvier 2008 Janitrix

Le ItemListener est utilis� pour les �v�nements relatifs aux �l�ments (liste, checkbox, etc.).

Cette interface d�clare une seule m�thode : itemStateChanged(ItemEvent e) qui indique que l'�l�ment a chang� d'�tat.

La classe ItemEvent �tend java.util.EventObject et dispose donc des m�thodes d�clar�es dans cette classe (notamment getSource() ), mais fournit �galement quatre autres m�thodes sp�cifiques aux �v�nements relatifs aux fen�tres, notamment getItem() qui retourne l'�l�ment affect� par l'�v�nement, getStateChange() retourne le nouvel �tat de l'�l�ment (s�lectionn� ou d�s�lectionn�), et getItemSelectable() qui retourne le composant originaire de l'�v�nement.

Afin d'ajouter un ItemListener sur les composants qui le permettent (les boutons, JcomboxBox, les listes, etc), vous disposez de la m�thode addItemListener(ItemListener).

Voici un exemple d'impl�mentation d'un ItemListener :

Code java : S�lectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class MaFrame extends JFrame implements ItemListener { 
	private JComboBox choix; 
  
	// [...] 
  
        public MaFrame() { 
            choix = new JComboBox(); 
            choix.addItemListener(this); 
        } 
  
	public void itemStateChanged(ItemEvent e) { 
		if(e.getStateChange() == ItemEvent.SELECTED) { 
			System.out.println("Un nouveau choix est s�lectionn�*: " + e.getItem().toString()); 
		}else if(e.getStateChange() == ItemEvent.DESELECTED) { 
			System.out.println("*Un choix est d�s�lectionn�*: " + e.getItem().toString()); 
		} 
	} 
}
Nous effectuons un test afin de savoir l'�tat de l'�l�ment affect� par l'�v�nement. En effet, deux �tats sont possibles : ItemEvent.ITEM_SELECTED et ItemEvent.DESELECTED. Il faut bien comprendre que la m�thode itemStateChanged est invoqu�e deux fois : une fois pour l'�l�ment qui vient d'�tre d�s�lectionn� et une fois pour celui qui vient d'�tre s�lectionn� (ceci est vrai dans le cas d'une JComboBox par exemple). Il est donc important de faire la diff�rence, sous peine de voir son code ex�cut� deux fois.

Mis � jour le 12 janvier 2008 Janitrix

Proposer une nouvelle r�ponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plut�t sur le forum de la rubrique pour �a


R�ponse � la question

Liens sous la question
pr�c�dent sommaire suivant
 

Les sources pr�sent�es sur cette page sont libres de droits et vous pouvez les utiliser � votre convenance. Par contre, la page de pr�sentation constitue une �uvre intellectuelle prot�g�e par les droits d'auteur. Copyright � 2025 Developpez Developpez LLC. Tous droits r�serv�s Developpez LLC. Aucune reproduction, m�me partielle, ne peut �tre faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'� trois ans de prison et jusqu'� 300 000 � de dommages et int�r�ts.