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

SWT/JFace Java Discussion :

SWT Listener lors d'un ajout d'une Widget a un Composite, ca existe?


Sujet :

SWT/JFace Java

  1. #1
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut SWT Listener lors d'un ajout d'une Widget a un Composite, ca existe?
    Bonjour,

    Je voulais avoir si il etait possible d'ajouter un listener (sur le Display, le Shell?) pour savoir quand une Widget SWT est ajoute.

    Ex :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Label label = new Label(shell, SWT.NONE);
    J'aimerais ajouter un listener SWT pour detecter que le label est ajoute au Shell.

    Un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    shell.addListener(SWT....) {
       public void widgetAdded(Event e) {
          Widget widget = (Widget)e.getSource();
       }
    }
    En fait ce fonctionnement existe en Swing en implementant AWTEventListener

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    public class CSSSwingApplyStylesListener implements AWTEventListener {
     
    	public void eventDispatched(AWTEvent evt) {
    		if (evt instanceof ContainerEvent) {
    			ContainerEvent cevt = (ContainerEvent) evt;
    			if (cevt.getID() == ContainerEvent.COMPONENT_ADDED) {
                                Component component = cevt.getChild();
    ...
    Mais j'ai bien peur que ca n'existe pas en SWT.

    Merci de votre aide.

    Angelo

  2. #2
    Rédacteur

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    Juillet 2005
    Messages
    14 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14 974
    Points : 73 024
    Points
    73 024
    Par défaut
    Bonsoir Angelo,

    J'ai été voir le code source d'un Control et je ne pense pas que cela soit possible, il n'y a rien au niveau de l'API Swt qui puisse te le renseigner.

    Suite à ma recherche j'ai trouvé cet article fort intéressant. Il montre les différences entre les trois boites à outils Java AWT/Swing/SWT
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Ingénieur de Recherche en informatique au LIAS / ISAE-ENSMA
    Page de Developpez.com : mbaron.developpez.com
    Twitter : www.twitter.com/mickaelbaron
    Blog : mickael-baron.fr
    LinkedIn : www.linkedin.com/in/mickaelbaron
    DBLP : dblp.uni-trier.de/pers/hd/b/Baron:Micka=euml=l

  3. #3
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Bonsoir keulkeul,

    Merci beaucoup de ta réponse. J'ai aussi de mon coté regarder le code source, et apperement cela n'existe pas en SWT. En fait je cherchais ce mode de fonctionnement car je suis en train de mettre un moteur de CSS et pour appliquer les styles des widgets SWT, le moteur de CSS doit itérer sur toutes les Widget (une fois qu'elles ont ete ajoutes).

    En Swing, l'application du style s'effectue lorsque le Component est ajout a un container ce qui evite d'iterer.

    Merci aussi pour l'article, il est tres interessant.

    Angelo

  4. #4
    Rédacteur

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    Juillet 2005
    Messages
    14 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14 974
    Points : 73 024
    Points
    73 024
    Par défaut
    Bonjour Angelo,

    En fait, j'ai pensé à quelque chose mais bon il s'agit d'une piste à détailler. Quand tu crées, il y a création d'un nouveau composant non ? puisque par défaut un composant à sa création doit y être ajouté. Il n'y a pas moyen de connaitre par rapport à la couche basse si un nouveau handle est créé ?

    Mickael
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Ingénieur de Recherche en informatique au LIAS / ISAE-ENSMA
    Page de Developpez.com : mbaron.developpez.com
    Twitter : www.twitter.com/mickaelbaron
    Blog : mickael-baron.fr
    LinkedIn : www.linkedin.com/in/mickaelbaron
    DBLP : dblp.uni-trier.de/pers/hd/b/Baron:Micka=euml=l

  5. #5
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Bonsoir keulkeul,

    J'ai résolu mon problème avec SWT. C'est pas super propre mais voici l'idée.
    Mon but est de detecter l'ajout d'une widget pour pouvoir lui appliquer un style.

    Pour cela, j'ai utilise l'evenement Resize qui est appele des qu'un composant est resize (et appele lors de l'affichage de la fenetre).

    La question est ou ajoute cet evenement? La response est dans l'instance display a l'aide de la methode addFilter.
    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
     
    ...
    display.addFilter(SWT.Resize, new ResizeListener());
    ..
    	private class ResizeListener implements Listener {
     
    		public void handleEvent(Event event) {
    			// On resize, apply styles (on the first resize)
    			Widget widget = event.widget;
    			if (!isWidgetAlreadyAdded(widget)) {
    				widget.setData(WIDGET_ALREADY_ADDED, WIDGET_ALREADY_ADDED);
    				if (engine != null) {
    					engine.applyStyles(widget, false);
    				}
    			}
    		}
    	}
    	private final boolean isWidgetAlreadyAdded(Widget widget) {
    		if (widget == null)
    			return true;
    		return widget.getData(WIDGET_ALREADY_ADDED) != null;
    	}
    Voila comment j'ai pu simuler l'ajout de widget.

    Angelo

  6. #6
    Rédacteur

    Avatar de Mickael Baron
    Homme Profil pro
    Ingénieur de Recherche en Informatique
    Inscrit en
    Juillet 2005
    Messages
    14 974
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vienne (Poitou Charente)

    Informations professionnelles :
    Activité : Ingénieur de Recherche en Informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2005
    Messages : 14 974
    Points : 73 024
    Points
    73 024
    Par défaut
    Salut azerr,

    Quelle différence entre la méthode addFilter et addListener ?

    En fait, au travers de cet écouteur tu peux voir passer tous ce qui transitent sur ton IHM ?


    Mickael
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d"un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Ingénieur de Recherche en informatique au LIAS / ISAE-ENSMA
    Page de Developpez.com : mbaron.developpez.com
    Twitter : www.twitter.com/mickaelbaron
    Blog : mickael-baron.fr
    LinkedIn : www.linkedin.com/in/mickaelbaron
    DBLP : dblp.uni-trier.de/pers/hd/b/Baron:Micka=euml=l

  7. #7
    Membre expérimenté
    Avatar de azerr
    Homme Profil pro
    Ingénieur Etude JEE/Eclipse RCP
    Inscrit en
    Avril 2006
    Messages
    942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur Etude JEE/Eclipse RCP
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 942
    Points : 1 464
    Points
    1 464
    Par défaut
    Bonjou rkeulkeul,

    Quelle différence entre la méthode addFilter et addListener ?
    En fait, au travers de cet écouteur tu peux voir passer tous ce qui transitent sur ton IHM ?
    Oui c ca. L'instance Display est une sorte de controlleur de la fenêtre.
    La methode addFilter permet de recuperer tous les evenments qui sont declenches par les widgets. Dans mon cas je veux recuperer l'evenement Resize de n'importe qu'elle widget. La méthode addFilter permet d'eviter d'ajouter un listener Resize sur chacune des widgets.

    La methode addListener se comporte comme un listener standard d'une widget (SWT.Close, SWT.Settings...(voir les source de Display) ) ou le listener concerne uniquement display (et pas ces widgets).

    Enfin ce que je t'explique c'est ce que j'ai pu comprendre lors de mes tests. A verifier quand meme sur le net que je ne dis pas trop de betises.

    Angelo

Discussions similaires

  1. java.lang.StackOverflowError lors de l'ajout dans une ArrayList
    Par alys56 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 02/04/2008, 18h54
  2. Erreur lors de l'ajout dans une table
    Par k_boy dans le forum Bases de données
    Réponses: 14
    Dernier message: 31/03/2008, 15h05
  3. SWT : plantage lors du "Run" à cause d'une mauvaise version
    Par monsieurouxx dans le forum SWT/JFace
    Réponses: 1
    Dernier message: 01/09/2007, 17h10
  4. Erreur lors de l'ajout d'une référence web
    Par Pilloutou dans le forum Visual Studio
    Réponses: 2
    Dernier message: 12/02/2007, 15h11
  5. Erreur lors de l'ajout d'une table
    Par FredMines dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 27/07/2005, 13h13

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