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 :

TreeViewer & Form


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 TreeViewer & Form
    Bonjour,

    J'ai dans l'idée de crée une interface divisée en deux,
    Sur la gauche un arbre et sur la droite une sorte de formulaire qui permet de modifier les données de l'item sélectionné dans l'arbre.

    J'aimerai savoir quelle solution serait la plus "propre".
    De plus j'utilise un Classe Composant qui a pour attribut une liste d'Element (Composant + Fichier).
    De quelle manière puis-je "attacher" cette classe au formulaire ?

    Merci

  2. #2
    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,

    Est-ce, dans sa forme (pas ses données) :

    1. le même formulaire pour tous les items de l'arbre ?
    2. un formulaire différent pour chaque item ?
    3. un nombre de formulaires restreints, associé par exemple à propriétés de l'item (par exemple, à un type) ?


    Dans le cas 1, tout simplement créer un unique composant (Composite, qui contient par exemple un Form) qui représente le formulaire, avec setter et getter pour lui transférer le modèle de données (ça peut être les informations séparées, ou une classe à toi qui contient ses informations). A chaque sélection, tu appelles le getter (ou les getters) pour pouvoir sauvegarder ce qui a été saisi, tu appelles le setter pour remplir le formulaire avec les données de la nouvelle sélection. L'association des données et des champs peut se faire soi-même, ou par binding.

    Dans le cas 2, la zone où s'affiche le formulaire est un composant vide à l'origine, prévoir que chaque item soit capable de fabriquer le formulaire (en lui passant le parent, c'est-à-dire le composant vide créé à l'origine). Avant de créer le formulaire pour le nouvel élément sélectionné, faire la sauvegarde des données de l'ancien, puis faire un dispose(), pour le détruire.

    Dans le cas 3, pareil que dans le cas 1, mais le composant contient plusieurs Form, et tu utilises un StackLayout pour choisir celui qui correspond à l'élément sélectionné.

    Ensuite, la question est : est-ce une application RCP, ou seulement SWT. Dans le second cas, ton interface sera juste un Shell avec un GridLayout ) 2 colonnes et la sélection se gère se gère par écouteur (org.eclipse.jface.viewers.ISelectionChangedListener pour un TreeViewer). Dans le premier, il peut être intéressant de faire 1 vue pour l'arbre, et un éditeur pour le formulaire, et la sélection se gérera par SelectionProvider, du moins en E3, parce que je ne connais pas trop E4, pas assez pour donner des pistes sur l'implémentation).




    Je ne suis pas sûr d'avoir compris ton histoire de composant, mais s'il s'agit d'avoir un objet associé à l'item sélectionné, il suffit de passer sa référence au constructeur de la classe qui représente ton formulaire, et de la stocker dans une variable de la classe.
    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.

  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
    Merci joel,

    alors pour commencé j'ai utilisé la seconde méthode (même si je n'ai que 3 formulaires différents), j'essaierai sans doute la troisième solution plus tard...
    Mais pour l'instant un autre problème me gène. J'ai utilisé un Sash pour séparer mon arbre (à gauche) de mon formulaire (à droite), Et le-dit formulaire n’apparaît pas tant que je ne touche pas au sash. Et forcement lorsque je change d'item, je dispose le composant (puis je le reconstruit) et je doit redécaler le Sash pour qu'il puisse apparaitre....

    Est-ce un comportement normal ? (j'en doute)
    Comment pourrais-je palier à ce problème ?

    Merci

  4. #4
    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
    Avec un SashForm, tu peux utiliser setMaximizedControl() pour indiquer le seul composant visible, tant qu'il n'y en a pas d'autres (donc quand il n'y a pas de sélection dans l'arbre). Ensuite, dès qu'il y a une sélection, tu n'as plus qu'à faire setMaximizedControl(null) pour revenir à une situation à plusieurs éléments séparés par des Sash, et si la sélection disparait, tu refais setMaximizedControl( tree ).

    Par contre, j'ai l'impression que tu as des problèmes de répartitions des éléments dans le SashForm, c'est çà ? Tu utilises bien setWeights() pour initialiser la répartition ?
    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.

  5. #5
    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
    En fait j'utilisais pas un SahsForm mais juste un Sash....
    J'ai simplifié mon code en utilisant un SahsForm, mais le problème persistait, pour le solutionner j'ai du appelé comp.layout() après avoir créé les widgets du formulaire.

    Et bon conseil pour l'utilisation de setMaximizedControl()

    Merci Beaucoup !

  6. #6
    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
    Citation Envoyé par Zombee Voir le message
    ...mais le problème persistait, pour le solutionner j'ai du appelé comp.layout() après avoir créé les widgets du formulaire.
    Ah, oui, parce que tu les crées après coup (après avoir affiché le SashForm sans). D'ailleurs, il est nécessaire de le faire également chaque fois que tu changes le topcontrol du StackLayout puisque c'est cette solution que tu as choisie.

    Le layout du composant, c'est effectivement un classique après avoir modifié les composants d'un conteneur (c'est le revalidate() de SWING en quelque sorte). Personnellement, j'utilise cette méthode utilitaire chaque fois que j'ajoute ou j'enlève un composant (elle fonctionne quel que soient le composant et l'arbre de conteneurs - enfin, je ne l'ai pas encore mise en défaut) :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    public static void revalidateLayout (Control control) {
     
    		Control c = control;
    		do {
    			if (c instanceof ExpandBar) {
    				ExpandBar expandBar = (ExpandBar) c;
    				for (ExpandItem expandItem : expandBar.getItems()) {
    					expandItem
    						.setHeight(expandItem.getControl().computeSize(expandBar.getSize().x, SWT.DEFAULT, true).y);
    				}
    			}
    			c = c.getParent();
     
    		} while (c != null && c.getParent() != null && !(c instanceof ScrolledComposite));
     
    		if (c instanceof ScrolledComposite) {
    			ScrolledComposite scrolledComposite = (ScrolledComposite) c;
    			if (scrolledComposite.getExpandHorizontal() || scrolledComposite.getExpandVertical()) {
    				scrolledComposite
    					.setMinSize(scrolledComposite.getContent().computeSize(SWT.DEFAULT, SWT.DEFAULT, true));
    			} else {
    				scrolledComposite.getContent().pack(true);
    			}
    		}
    		if (c instanceof Composite) {
    			Composite composite = (Composite) c;
    			composite.layout(true, true);
    		}
     
    }
    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.

  7. #7
    Rédacteur/Modérateur

    Avatar de alain.bernard
    Homme Profil pro
    Ingénieur aéronautique
    Inscrit en
    Décembre 2011
    Messages
    749
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur aéronautique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 749
    Points : 5 219
    Points
    5 219
    Par défaut
    Bonsoir,

    J'arrive un peu après la bataille, mais un MasterDetails n'aurait-il pas été plus simple pour ce genre d'interface ?
    Cf. http://mbaron.developpez.com/eclipse/forms/ slide 47
    Pas de messages techniques par MP, les forums sont là pour ça.
    Rédacteur d'articles sur la plateforme Eclipse

    N'oubliez pas de consulter les FAQ Eclipse et les cours et tutoriels Eclipse

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

Discussions similaires

  1. [RCP] Ouvrir des vues à partir du treeviewer sous forme des onglets
    Par chiraz86 dans le forum Eclipse Platform
    Réponses: 3
    Dernier message: 10/03/2010, 17h19
  2. TreeView sous windows application form
    Par mbarki.rachid dans le forum Windows
    Réponses: 1
    Dernier message: 03/05/2007, 15h20
  3. [VBA-E] mise en forme texte dans le noeud d'une treeview
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 17/08/2006, 16h16
  4. Mise en forme de Treeview
    Par marsupilami34 dans le forum Général VBA
    Réponses: 13
    Dernier message: 07/08/2006, 16h07
  5. [Forms 6i] icon sur treeview
    Par Process Linux dans le forum Oracle
    Réponses: 2
    Dernier message: 26/01/2006, 12h14

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