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 :

Combo selection / modification GUI


Sujet :

SWT/JFace Java

  1. #1
    Membre du Club
    Homme Profil pro
    ITESCIA
    Inscrit en
    Janvier 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : ITESCIA
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 101
    Points : 55
    Points
    55
    Par défaut Combo selection / modification GUI
    Bonjour à tous,

    Aujourd'hui mon problème est au sujet des combos, ou plutôt des listeners, enfin vous verrez !

    Je veux créer une fenêtre ne possédant qu'un simple label avec une comboBox (jusque là tout va bien).

    Je veux par la suite afficher d'autre données en fonction de la sélection de la combo. Pour ce faire j'utilise un selectionListener qui appelle une méthode d'une autre classe qui contient les informations. A cette méthode je ne donne que le composant parent (dans mon cas : Shell).

    Mais lorsque je sélectionne l'élément que je souhaite dans la comboBox, rien n’apparaît. Le code ne me jette pas d'erreur, mais rien ne se passe. Et lorsque je débug je ne vois pas de problème particulier.

    Alors si vous avez une idée de quoi je parle et de comment je pourrais m'en sortir, n'hésitez pas !

    Merci

  2. #2
    Membre expérimenté Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Points : 1 622
    Points
    1 622
    Par défaut
    Salut,

    Va falloir nous en donner un peu plus si tu veux qu'on t'aide.

    Un peu de code serait le bienvenue car on peut pas deviner comment tu fais

  3. #3
    Membre du Club
    Homme Profil pro
    ITESCIA
    Inscrit en
    Janvier 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : ITESCIA
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 101
    Points : 55
    Points
    55
    Par défaut
    Premièrement voici le listener de la combo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    cPlugin.addSelectionListener(new SelectionAdapter() {
    	@Override
    	public void widgetSelected(SelectionEvent e) {
    		for (PluginData plugin : plugins) {
    			if (plugin.getPluginName().equals(cPlugin.getText())){
    				plugin.affiche(getShell());
    			}
    		}
    	}
    });
    J'utilise un getter sur le Shell (qui sert de Composite parent par la suite) pour ne pas avoir à le déclarer en final.

    Ensuite la classe PluginData fonctionne de la manière suivante :
    ClasseA contient une liste d'éléments de la ClasseB qui contiennent chacun une liste d'élément de la ClasseC.

    Donc lors de l'appel de la fonction affiche(Composite) de la ClasseA celle-ci ajoute des éléments d'IHM au shell et appelle la méthode affiche(Composite) de chaque élément de la classeB, etc....

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    public void affiche(Composite parent) {
     
    	CTabFolder folder = new CTabFolder(parent, SWT.TOP | SWT.BORDER);		
    	folder.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
     
    	for (SectionData section : this.sections)
    	{
    		section.affiche(folder);
    	}
    }
    En espérant avoir été plus clair !

    Merci

  4. #4
    Membre du Club
    Homme Profil pro
    ITESCIA
    Inscrit en
    Janvier 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : ITESCIA
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 101
    Points : 55
    Points
    55
    Par défaut
    Bon j'ai fait un test sur le code précédent où l'interface n'est pas créée par la sélection d'un élément dans la comboBox, mais automatiquement par le premier élément trouvé.
    Et cela fonctionne. J'en arrive à la conclusion que mon problème résulte lors de l'appel du 'Selection Listener'.

    Si vous avez des pistes de réflexions ou des propositions pour résoudre mon problème, n'hésitez pas !

    Merci

  5. #5
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Après avoir créer tous les composants, il est nécessaire que tu reforces le layout du parent de ces composants (le shell donc), et probablement de faire un redimensionnement du shell (un pack() par exemple). Attention, également, à disposer le folder précédemment créé, sinon tu vas avoir accumulation à chaque changement de sélection (à moins que c'est ce que tu désires). Une autre façon de procéder est d'utiliser un Composite avec un StackLayout, et de créer tous les folders d'avance : lors du changement de sélection, tu le places le folder correspondant en top du StackLayout. Éventuellement, en fonction du nombres de données à afficher dans chaque folder, et du temps qu'il faut pour les récupérer, pour éviter un temps trop long à l'ouverture du shell, tu peux générer les composants dans les folder vides, et les remplir lors du change de sélection dans la combo, avant de placer en top le folder. Tu peux également faire une combinaison des 2 méthodes : au début le Composite qui a le StackLayout est vide, et tu places en top les folders s'ils ont déjà été créés, sinon tu les créés (en utilisant une map sélection/folder, pour garder le lien entre sélection et folder déjà créé).
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  6. #6
    Membre du Club
    Homme Profil pro
    ITESCIA
    Inscrit en
    Janvier 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : ITESCIA
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 101
    Points : 55
    Points
    55
    Par défaut
    Tout d'abord merci pour ta réponse joel.drigo !

    Ensuite en effet en ajoutant un mon problème était 'résolu'.

    Mais j'ai été séduit par l'utilisation d'un StackLayout comme tu me l'as exposé.

    Je créé désormais un Composite ayant un StackLayout et ayant pour enfant d'autre Composite contenant les données que je souhaite. Maintenant lorsque je modifie ma selection dans le combo, je change la valeur du topControl du premier Composite...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    cSelect.addSelectionListener(new SelectionAdapter() {
            @Override
    	public void widgetSelected(SelectionEvent event) 
    	{
    		for (PluginData plugin : plugins) {
    			if (plugin.getPluginName().equals(cSelect.getText())){
    				layout.topControl = plugin.content;
    				panelContent.layout();
    			}
    		}
    	}
    });
    plugin.content correspondant au Composite contenant les données à afficher.

    Mais une fois encore, Rien...

    J'ai trouvé plusieurs exemple utilisant un StackLayout, j'ai me semble-t-il suivit les indications mais rien n'y fait.

    Donc si quelqu'un souhaite aider une âme en peine...
    Bienvenu !

  7. #7
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Effectivement, le changement de topcontrol ne suffit pas : il faut indiquer au "bon" parent qu'il doit se relayouter, en appelant parent.layout(true, true).

    Pour déterminer le bon parent, ça dépend un peu des différents layouts qu'il y a dans la partie en amont du composite qui a le stackLayout (si la taille du composite affiché en top dans le stacklayout à un impact sur les tailles de composants se trouvant dans des composants en amont, en particulier si les composites qu'il y a dans le stacklayout n'ont pas tous la même taille). Le plus simple, serait de faire ça sur le shell, mais on peut vouloir éviter de relayouter toute une arborescence de composant pour rien. A toi de voir, quel parent tu dois/veux relayouter.
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  8. #8
    Membre du Club
    Homme Profil pro
    ITESCIA
    Inscrit en
    Janvier 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : ITESCIA
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2013
    Messages : 101
    Points : 55
    Points
    55
    Par défaut
    Justement dans le code affiché plus haut je fais un J'ai donc essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    panelContent.layout(true, true);
    puis
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    shell.layout(true, true)
    mais là encore, rien n'y fait...

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

Discussions similaires

  1. [WM18] Actualiser un champ combo après modification du fichier de données
    Par elvan49 dans le forum Windev Mobile
    Réponses: 3
    Dernier message: 17/11/2016, 17h20
  2. Style css : flèche du combo (select)
    Par bestcasaoui dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 01/03/2012, 09h37
  3. Envoyer une entrée d'un combo (select) en post
    Par Chatbour dans le forum Langage
    Réponses: 4
    Dernier message: 08/07/2008, 12h27
  4. fonction qui modifie les valeurs de combos <select>
    Par NicoO_O dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 16/05/2007, 13h02
  5. modification d'un combo box
    Par bourguy dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 22/02/2005, 16h14

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