begin process at 2013 05 20 14:07:42
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Tutoriaux

 > UTILISER CORRECTEMENT LES LISTENERS SWING

UTILISER CORRECTEMENT LES LISTENERS SWING


 Information sur la source

Note :
Aucune note
Catégorie :Tutoriaux Classé sous :listeners, swing, ActionListener, tutoriel Niveau :Débutant Date de création :04/03/2013 Vu / téléchargé :1 497 / 226

Auteur : Julien39

Ecrire un message privé
Site perso
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

Beaucoup de codes ou de questions posées sur le forum présentent des listeners swing mal utilisés. Ce tutoriel a pour but de vous apprendre à utiliser efficacement les listenrers.

Source

  • import java.awt.Color;
  • import java.awt.Dimension;
  • import java.awt.FlowLayout;
  • import java.awt.event.ActionEvent;
  • import java.awt.event.ActionListener;
  • import javax.swing.JButton;
  • import javax.swing.JFrame;
  • import javax.swing.JOptionPane;
  • import javax.swing.JPanel;
  • public class Fenetre extends JFrame {
  • private static final long serialVersionUID = -2780252426871759949L;
  • private JButton boutonExemple;
  • private JPanel panelGris;
  • private JPanel panelBleu;
  • public Fenetre() {
  • setDefaultCloseOperation(EXIT_ON_CLOSE);
  • setLayout(new FlowLayout());
  • /*
  • * Création du bouton
  • */
  • boutonExemple = new JButton("Afficher");
  • /*
  • * Ajout du listener en implémentant la méthode actionPerformed dans une sous classe
  • */
  • boutonExemple.addActionListener(new ActionListener() {
  • @Override
  • public void actionPerformed(ActionEvent e) {
  • JOptionPane.showMessageDialog(null, "message");
  • }
  • });
  • panelBleu = new JPanel();
  • panelBleu.setPreferredSize(new Dimension(50, 50));
  • panelBleu.setBackground(Color.BLUE);
  • /*
  • * Ajout du listener
  • */
  • panelBleu.addMouseListener(new ListenerChangementCouleur(panelBleu, Color.BLUE, Color.CYAN));
  • panelGris = new JPanel();
  • panelGris.setPreferredSize(new Dimension(50, 50));
  • panelGris.setBackground(Color.DARK_GRAY);
  • /*
  • * Ajout du listener
  • */
  • panelGris.addMouseListener(new ListenerChangementCouleur(panelGris, Color.DARK_GRAY, Color.LIGHT_GRAY));
  • add(boutonExemple);
  • add(panelBleu);
  • add(panelGris);
  • setSize(300, 100);
  • setLocationRelativeTo(null);
  • setVisible(true);
  • }
  • public static void main(String[] args) {
  • new Fenetre();
  • }
  • }
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;


public class Fenetre extends JFrame {
	
	private static final long serialVersionUID = -2780252426871759949L;
	
	private JButton boutonExemple;
	private JPanel panelGris;
	private JPanel panelBleu;
	
	public Fenetre() {
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		setLayout(new FlowLayout());
		
		/*
		 * Création du bouton
		 */
		boutonExemple = new JButton("Afficher");
		
		/*
		 * Ajout du listener en implémentant la méthode actionPerformed dans une sous classe
		 */
		boutonExemple.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				JOptionPane.showMessageDialog(null, "message");
				
			}
		});
		
		panelBleu = new JPanel();
		panelBleu.setPreferredSize(new Dimension(50, 50));
		panelBleu.setBackground(Color.BLUE);
		
		/*
		 * Ajout du listener
		 */
		panelBleu.addMouseListener(new ListenerChangementCouleur(panelBleu, Color.BLUE, Color.CYAN));
		
		panelGris = new JPanel();
		panelGris.setPreferredSize(new Dimension(50, 50));
		panelGris.setBackground(Color.DARK_GRAY);
		
		/*
		 * Ajout du listener
		 */
		panelGris.addMouseListener(new ListenerChangementCouleur(panelGris, Color.DARK_GRAY, Color.LIGHT_GRAY));
		
		add(boutonExemple);
		add(panelBleu);
		add(panelGris);
		setSize(300, 100);
		setLocationRelativeTo(null);
		setVisible(true);
		
	}
	
	public static void main(String[] args) {
		new Fenetre();
	}

}


 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip Source avec une capture TRAITEMENT D'IMAGES
Source avec une capture BOUTON AVEC UN FOND DÉGRADÉ
Source avec une capture EXEMPLE D'UTILISATION D'UN JTEXTPANE
Source avec Zip Source avec une capture FENÊTRE DE NOTIFICATION
Source avec Zip EXEMPLE DE MANIPULATION DES FICHIERS TEXTES

 Sources de la même categorie

TELECHARGER UN FICHIER A PARTIR D'UNE URL EN SPECIFIANT UN N... par Scupper
Source avec Zip Source avec une capture COMMENT GENERER DES TABLES DANS UNE BD MYSQL A PARTIR DES EN... par NPcompletude
Source avec Zip Source avec une capture COMMENT CONFIGURER UNE CONNEXION À UNE BD SUR NETBEANS 7.0 par NPcompletude
Source avec une capture EXEMPLE D'UTILISATION D'UN JTEXTPANE par Julien39
Source avec Zip EXEMPLE DE MANIPULATION DES FICHIERS TEXTES par Julien39

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture INTRO DE DÉMARRAGE APPLICATION par Galaxias
Source avec une capture EXEMPLE D'UTILISATION D'UN JTEXTPANE par Julien39
Source avec Zip Source avec une capture FENÊTRE DE NOTIFICATION par Julien39
Source avec Zip Source avec une capture JEU " TAUREAU,VACHE" par Invensible
Source avec Zip POURSUIVRE UNE FENETRE AVEC SA SOURIS par Alpha_cafe

Commentaires et avis

Commentaire de gouessej le 15/03/2013 14:37:33

Bonjour

Il y a une faute de frappe dans la description ("listenrers" au lieu de "listeners"). De plus, ton utilisation des écouteurs pose problème. Pour éviter qu'il ne garde des références sur des objets dont on voudrait bien se débarrasser et pour rendre le code plus facile à adapter (par exemple par héritage), il est recommandé d'éviter de mettre du code dans ses "callbacks", il est préférable d'appeler simplement une méthode de la classe de l'instance à laquelle on abonne un écouteur. Ainsi, il ne garde qu'une référence implicite sur l'instance en question et rien d'autre, cela réduit les risques de fuite mémoire, cela évite également qu'un objet obsolète soit utilisé si l'instance à laquelle on abonne un écouteur mute (par exemple si l'écouteur reprend la valeur d'un champ de l'objet écouté et qu'elle change). En terme d'évolutivité, si tu souhaites modifier le comportement du code appelé par ton écouteur, tu pourras simplement surcharger la méthode de l'instance alors que si tu mets ce code directement dans une méthode de l'écouteur, tu devras aussi désabonner l'écouteur de l'objet écouté et créer un autre écouteur. Je travaille depuis 2007 et je peux te dire qu'on peut perdre beaucoup de temps bêtement à cause de ce genre de choses. Tu peux prendre exemple sur le code généré par Matisse GUI Builder dans Netbeans, il crée des méthodes privées pour chaque méthode implémentant l'interface d'un écouteur. C'est après avoir perdu un temps fou à corriger des fuites mémoire que j'ai fini par comprendre pourquoi il procède ainsi. En fait, je conseille d'utiliser les écouteurs comme de vulgaires pointeurs sur fonctions, ça évite beaucoup d'ennuis.

Commentaire de Julien39 le 15/03/2013 15:42:15 administrateur CS

Salut et merci pour ton commentaire.

A vrai dire, je n'ai pas tellement compris comment tu préconises de les utiliser. Pourrais tu me donner un exemple stp ?

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

implements ActionListener sur un obj extends Frame [ par Infameus ] Je me rappel plus pourquoi le compilateur veux que ma classe soit déclarée abstraite lorsque je rajoute une implementation ActionListener. Ma classe ActionListener dans une autre classe [ par chmurbluk ] bon, alors j'arrive bien à mettre un actionListener dans une classe héritant de JFrame, avec son Action performed et tout mais alors moi maintenant g SWING/font/XML/arbre binaire algo URGENT !!! [ par mkstraits ] salut !à partir d'une interface swing java, on est supposé pouvoir entrer des formules (dans un certain langage de logique) exemple simple: (a.b)=(c+d Swing chemin erroné!!! [ par snake64 ] Bonjour à tous !!Encore une question bidon mais dont je ne trouve pas la réponse!!!J'ai voulu gérer mes boutons de souris et donc j'utilise la classe Interface Swing [ par sikstar ] Yop all !Je débute en java, j'travaille sur des interfaces swing.J'aimerais placer des JButton a ma facon, malheureusement on ne les place pas par coo Swing - GridLayout [ par sikstar ] Voila merci ki lira et répondra à ce post ;)Alors j'ai tenté de définir un layout GridLayout pour placer des boutons, voici le code source en berf :im impression avec swing [ par wilber ] Salut!COmment imprimer un fichier texte avec swing???Jsouhaiterais lance l'impression apres avoir fixe les differents parametres (avec la methode prin Swing / awt [ par leBigouden ] Salut tt le mondej'aimerais savoir qu'elles sont les avantages a utiliser le package Swing plutot que awt (avantage d'une JFrame par rapport a une Fra comment faire pour redimentionner une interface swing pour imprimer [ par zozolh ] comment faire pour redimentionner une interface swing ? quand j'imprime la taille est trop grande et sort de la zone d'impression, et j'ai pas toute m interface graphique avec swing [ par stickasia ] bonjour j'essai de faire déplacer un carre de gauche a droite avec un timer et avec swing pouvez vous maider SVP


Nos sponsors


Sondage...

CalendriCode

Mai 2013
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 8,424 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales