Précédent   Forum du club des développeurs et IT Pro > Java > Interfaces Graphiques en Java > SWT/JFace
SWT/JFace Forum d'entraide pour les API SWT/JFace. Avant de poster -> FAQ SWT/JFace
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 21/08/2012, 17h36   #1
Le Petit Lémurien
Invité de passage
 
Homme
Ingénieur développement logiciels
Inscription : août 2012
Messages : 10
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2012
Messages : 10
Points : 2
Points : 2
Par défaut Binder les checkbox d'un CheckBoxTreeViewer

Bonjour à tous,

Je dispose d'un arbre à checkbox, avec des colonnes (CheckBoxTreeViewer) où chaque nœud représente un objet du modèle.
Un objet possède des attributs dont certains sont représentés dans les colonnes de l'arbre.
Chaque objet possède aussi un booléen, représenté par la checkbox de chaque nœud de l'arbre

Autant je réussi à binder les attributs présents dans les colonnes, autant je ne saisis pas comment binder les checkbox sur ce booléen .

Pour le moment j'ai mis en place un provider pour le contenu sur mon CheckBoxTreeViewer, des providers pour gérer l'affichage de mes colonnes (un par colonne) et enfin un provider de l'état de mes checkbox (implémentation de ICheckStateProvider) où je mets manuellement à jour le booléen sur mes objets.

Au final, je voudrais qu'à l'affichage de ma vue l'arbre soit initialisé, i.e. que des checkbox soient cochées, en fonction d'un attribut de type booléen présent sur mes objets.
Et si je coche/décoche que le booléen soit automatiquement mis à jour dans l'objet.

Si quelqu'un a des idées sur le sujet, je suis preneur.
Le Petit Lémurien est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/08/2012, 11h44   #2
Gueritarish
Modérateur
 
Avatar de Gueritarish
 
Homme Marc
Développeur Java
Inscription : mai 2007
Messages : 1 589
Détails du profil
Informations personnelles :
Nom : Homme Marc
Âge : 28
Localisation : France, Haute Garonne (Midi Pyrénées)

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

Informations forums :
Inscription : mai 2007
Messages : 1 589
Points : 3 549
Points : 3 549
Salut,

Je ne sais pas si ça correspond exactement à ce que tu souhaites obtenir, mais en tout cas, voici un snippet qui binde l'état coché ou non à une propriété d'un POJO:
Code :
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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
public class BindingSnippet {
  private static class MyModel {
 
    private final String name;
 
    private boolean folder;
 
    public MyModel(final String aName, final boolean aFolderFlag) {
      name = aName;
      folder = aFolderFlag;
    }
 
    /**
     * @return the name
     */
    public String getName() {
      return name;
    }
 
    /**
     * @return the isFolder
     */
    public boolean isFolder() {
      return folder;
    }
 
    /**
     * @param aFolderFlag
     *          the isFolder to set
     */
    public void setFolder(final boolean aFolderFlag) {
      this.folder = aFolderFlag;
    }
  }
 
  public static void main(final String[] args) {
    final Display display = new Display();
    final File root = new File("/");
    final File[] listNames = root.listFiles();
    final MyModel[] models = new MyModel[listNames.length];
    int i = 0;
    for (final File file : listNames) {
      models[i] = new MyModel(file.getName(), file.isDirectory());
      i++;
    }
 
    Realm.runWithDefault(SWTObservables.getRealm(display), new Runnable() {
      @Override
      public void run() {
        final Shell shell = new Shell(display);
        shell.setLayout(new GridLayout(1, false));
 
        final CheckboxTableViewer viewer =
          CheckboxTableViewer.newCheckList(shell, SWT.SINGLE | SWT.H_SCROLL
              | SWT.V_SCROLL);
 
        viewer.setCheckStateProvider(new ICheckStateProvider() {
 
          @Override
          public boolean isChecked(final Object element) {
            return ((MyModel) element).isFolder();
          }
 
          @Override
          public boolean isGrayed(final Object element) {
            return false;
          }
        });
        viewer.setContentProvider(ArrayContentProvider.getInstance());
 
        ViewersObservables.observeCheckedElements(viewer, MyModel.class)
            .addSetChangeListener(new ISetChangeListener() {
 
              @Override
              public void handleSetChange(final SetChangeEvent event) {
                for (final Object element : event.diff.getAdditions()) {
                  if (element instanceof MyModel) {
                    ((MyModel) element).setFolder(true);
                  }
                }
                for (final Object element : event.diff.getRemovals()) {
                  if (element instanceof MyModel) {
                    ((MyModel) element).setFolder(false);
                  }
                }
              }
            });
 
        viewer.setLabelProvider(new LabelProvider() {
          @Override
          public String getText(final Object element) {
            return ((MyModel) element).getName();
          }
        });
 
        viewer.setInput(models);
 
        shell.pack();
        shell.open();
        while (!shell.isDisposed()) {
          if (!display.readAndDispatch())
            display.sleep();
        }
        display.dispose();
 
      }
    });
    Runtime.getRuntime().addShutdownHook(new Thread(new Runnable() {
      @Override
      public void run() {
        for (final MyModel myModel : models) {
          System.out.println("Name: " + myModel.getName() + " // folder? "
              + myModel.isFolder());
        }
      }
    }));
  }
}
Voilà, à+
Gueritarish
__________________
Pas de questions technique par MP, les forums sont là pour ça.

Le 5 et 6 juin à Toulouse, la première EclipseCon France !
Gueritarish est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 23/08/2012, 10h19   #3
Le Petit Lémurien
Invité de passage
 
Homme
Ingénieur développement logiciels
Inscription : août 2012
Messages : 10
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : août 2012
Messages : 10
Points : 2
Points : 2
Merci Gueritarish pour ta réponse.

En essayant d'appliquer ton code je me suis rendu compte que mes besoins étaient un peu trop compliqués (différents type de nœuds cochables, le fait de cocher un nœud entraine le cochage d'un autre nœud (ça peut être un autre type), ça entraine aussi l'édition de colonnes, etc...)), et que l'impact de la mise en place de ta solution n'est pas négligeable.

Je suis donc resté avec mon code qui n'est peut être pas optimisé, mais qui a le mérite de faire ce que je souhaite et d'être assez clair pour qui le reprendra après.

Merci en tout cas
Le Petit Lémurien est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h11.


 
 
 
 
Partenaires

Hébergement Web