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 :

Débutant JFace : bien comprendre les viewers


Sujet :

SWT/JFace Java

  1. #1
    Membre averti
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 502
    Points : 300
    Points
    300
    Par défaut Débutant JFace : bien comprendre les viewers
    Bonjour,

    Je reviens vous questionner sur JFace et la notion de viewer car je suis perdu. J'ai abordé JFace et je crois avoir compris que les viewers sont à la base une surcouche des composants SWT, mais il est possible que je dise une bêtise.

    Cependant je ne comprends pas la différence entre par exemple un composant SWT "Combo" et la notion de ComboViewer
    Ou encore "List" et "ListViewer"

    Plus concretement j'ai un petit bout de code qui crée un combo dans une boite de dialoue que je ne comprends pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cbvCategory = new ComboViewer(container, SWT.NONE);
    		Combo cbCategory = cbvCategory.getCombo();
    		cbCategory.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1));
    J'ai lu sur un tuto de cet excellent site que les viewers sont des classes qui encapsulent les composants SWT, mais ça ne m'éclaire pas tellement. J'espère ne pas avoir été trop évasif

    Vous remerciant pour votre aide

  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,

    Citation Envoyé par olivier252 Voir le message
    J'ai abordé JFace et je crois avoir compris que les viewers sont à la base une surcouche des composants SWT
    C'est bien ça. Plus globalement JFace est une surcouche de SWT. Elle facilite l'utilisation de SWT de différentes manières. En général, elle permet d'utiliser les composants de SWT en écrivant moins de code et en ayant moins d'aspects techniques de base à se préoccuper (comme la libération de ressources SWT en particulier). Un bon exemple est la classe org.eclipse.jface.viewers.TreeViewer, comparé un org.eclipse.swt.widgets.Tree, pour lequel il faut sans cesse créer (et donc penser à disposer lorsqu'on supprimer) des TreeItem (des composants purement graphiques affichant un élément de l'arbre (un label en gros)), alors que TreeViewer va gérer ça par l'intermédiaire d'un modèle dans lequel on va manipuler plutôt les objets qu'on veut manipuler (des données de modèle). En particulier pour les tris, il suffira d'indiquer un ViewerComparator plutôt que de gérer à la main l'ordre de TreeItem pour correspondre à l'ordre de tri... sans parler de la gestion des colonnes associées qui apportent un grand confort dans l'élaboration de treeiew, sans se taper tout le code base. Bref, au lieu de gérer l'existence et la position de plein de petits composants graphiques, on gère des notions fonctionnelles (métier).

    Citation Envoyé par olivier252 Voir le message
    Cependant je ne comprends pas la différence entre par exemple un composant SWT "Combo" et la notion de ComboViewer
    Ou encore "List" et "ListViewer"
    Certains composants ajoutent plus ou moins de richesse au composant SWT. Le but est de mettre en place un système MVC (modèle vue contrôleur) pour gérer les différents aspects : rendu (dessin), modèle de données, et action à faire (soit pour transformer la vue, soit pour déclencher des actions externes à la vue)

    Les composant JFace enrobent donc les composants SWT d'un décorateur qui va agir sur le composant SWT. Au final, on affiche bien un composant SWT, mais on le gère de préférence par l’intermédiaire du composant JFace (on peut accèder au composant SWT éventuellement pour faire des trucs qui ne sont pas prévus par le composant JFace .

    Citation Envoyé par olivier252 Voir le message
    Plus concretement j'ai un petit bout de code qui crée un combo dans une boite de dialoue que je ne comprends pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    cbvCategory = new ComboViewer(container, SWT.NONE);
    		Combo cbCategory = cbvCategory.getCombo();
    		cbCategory.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 3, 1));
    Qu'est-ce que tu ne comprends dans ce code exactement ? On instancie un ComboViewer, qui par défaut encapsule un org.eclipse.swt.widgets.Combo (il peut aussi encapsuler un org.eclipse.swt.widgets.custom.CCombo, un composant SWT un peu plus évolué graphiquement). Ensuite, on récupère l'instance de Combo pour lui affecter une contrainte de layout, en SWT (on pourrait utiliser JFace pour le faire, avec org.eclipse.jface.layout.GridDataFactory).
    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 averti
    Homme Profil pro
    Reconversion
    Inscrit en
    Novembre 2018
    Messages
    502
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Reconversion
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2018
    Messages : 502
    Points : 300
    Points
    300
    Par défaut
    Bonjour Joël et excuse-moi de répondre tardivement.
    Je te remercie pour ta réponse complète qui me fait rebondir sur une autre notion que j'ai du mal à comprendre : il s'agit du binding.

    Je ne comprends pas réellement la façon de procéder. Finalement lorsque j'essaie de schématiser le pattern MVC je comprends que en effet on lie les éléments de l'interface (la vue, le(s) viewer(s) ? ), aux modèles de données.

    Mais concrètement comment fait-on pour "binder" il faut rendre nos composants observés avec l'interface IObservable, pour rendre nos composants "observables" ?
    Du coup, les bindings font office de controller ?
    Je suis tombé sur un tuto qui utilise un bind comme suit pour lier un label "name"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // Liaison du champ "Name"
    	IObservableValue modelValue = BeanProperties.value(PersonBean.class, 
    		"name").observe(person);
    	IObservableValue widgetValue = WidgetProperties.text(SWT.Modify)
    		.observe(textName);
    	context.bindValue(widgetValue, modelValue);
    Or dans mon exemple de cours j'ai un bind d'une toute autre syntaxe et je m'y perds

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ViewerSupport.bind(
    	tableViewer,
    catalog.getWritableArticles(),			
    BeanProperties.values("name", "price", "publishedString", "stock"));
    Dans mon exemple de cours, on cherche à lier un article d'un catalogue fournisseur à un tableviewer.

    J'ai vu également que l'on utilise setContentProvider() et setInput(data); pour binder...Je suis perdu dans la syntaxe. Si jamais tu as un lien où le binding est abordé de manière simplifiée, je suis preneur

    Te remerciant à nouveau

Discussions similaires

  1. [Débutant] Besoin de bien comprendre les classes
    Par vahan dans le forum VB.NET
    Réponses: 12
    Dernier message: 24/10/2013, 18h54
  2. Réponses: 0
    Dernier message: 19/07/2013, 17h33
  3. Bien comprendre les textures
    Par kev42100 dans le forum API graphiques
    Réponses: 0
    Dernier message: 18/08/2011, 22h16
  4. Réponses: 0
    Dernier message: 04/11/2008, 11h22
  5. Réponses: 3
    Dernier message: 30/08/2006, 21h30

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