Afficher tous les événements d'un composant AWT/Swing


Description

Peut-être avez vous déjà perdu de précieuses minutes lors de la conception de votre interface graphique Swing à rechercher quel Listener permettrait de récupérer l'événement exact que vous souhaitez intercepter.

Le code proposé ici permet d'ajouter automatiquement tous les Listener disponibles pour le composant, de manière à avoir une trace en console de tous les événements.

Voici un exemple d'utilisation :

import java.io.File;

import javax.swing.JFrame;

import ccm.kx.swingTools.ListenerLogger;

public class Test
{
    public static void main(String[] args)
    {
        // Définit où générer les sources
        ListenerLogger.setPath(new File("src"));
        
        JFrame frame = new JFrame();
        
        // Ajoute tous les Listener à 'frame'
        ListenerLogger.logListeners(frame);
        
        frame.setSize(200, 200);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}


L'exécution se passe en deux temps. Au premier démarrage le programme va essayer de charger une implémentation de chaque Listener. Comme celles-ci n'existent pas encore le programme va générer le code source manquant dans le répertoire source spécifié. Le message suivant sera alors indiqué :

Une ou plusieurs implémentations de listeners sont manquantes : ...
Leur code source a été généré dans le répertoire ...\ccm\kx\swingTools
Pour les prendre en charge, redémarrer le programme après avoir compilé ces nouvelles sources.


Comme indiqué, les sources ont été générées à l'endroit indiqués par le paramètre ListenerLogger.setPath(String), ce qui correspond normalement au dossier contenant le code ListenerLogger.java

Voici par exemple à quoi ressemble le code source généré pour un FocusListener :

package ccm.kx.swingTools;

/**
 * FocusListener's implementation, automatically generated to be invoked by {@link ListenerLogger#logListeners(java.awt.Component...)}.
 * @author KX
 * @see java.awt.event.FocusListener
 */
public class ListenerLogger$java_awt_event_FocusListener implements java.awt.event.FocusListener
{
	@Override
	public void focusGained(java.awt.event.FocusEvent event)
	{
		System.out.println("FocusListener#focusGained\t"+event);
	}

	@Override
	public void focusLost(java.awt.event.FocusEvent event)
	{
		System.out.println("FocusListener#focusLost\t"+event);
	}
}


Il faudra alors compiler ces sources et relancer le programme. Au deuxième démarrage, puisque désormais les classes existent, elles seront automatiquement ajoutées et chaque événement sera affiché.

Il suffit donc de regarder la console au moment où l'on effectue l'événement que l'on souhaite intercepter pour le voir s'afficher et l'identifier. Reste alors à l'implémenter comme il faut.

Codes Sources

A voir également

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.