jeudi, octobre 18, 2007

TableTreeViewer deprecated, TreeViewer à la rescousse ...

Depuis la nouvelle version d'Eclipse 3.3, il est déconseillé d'utiliser directement le composant TableTreeViewer pour mixer un arbre avec une table. La raison est simple. Eclipse 3.3 intègre une gestion des colonnes via la classe ViewerColumn (sous types TableViewerColumn et TreeViewerColumn).

Par conséquent, pour éviter d'utiliser le composant TableTreeViewer, il faut utiliser un TreeViewer avec des colonnes de type TreeViewerColumn.

La capture d'écran (un arbre pour la première colonne et une table pour les autres colonnes)

Le code
final TreeViewer viewer = new TreeViewer(shell, SWT.FULL_SELECTION);
viewer.setContentProvider(new MyTreeContentProvider());

TreeViewerColumn column = new TreeViewerColumn(viewer, SWT.CENTER);
column.setLabelProvider(new ColumnLabelProvider() {
public String getText(Object element) {
if (element instanceof Person) {
Person current = (Person)element;
return current.getName();
} else {
return element.toString();
}
}
});
column.getColumn().setText("Métier / Nom");

column = new TreeViewerColumn(viewer, SWT.CENTER);
column.setLabelProvider(new ColumnLabelProvider() {
public String getText(Object element) {
if (element instanceof Person) {
Person current = (Person)element;
return current.getAdress();
} else {
return null;
}
}
});
column.getColumn().setText("Adresse");

...
La première colonne appelée Métier / Nom contient l'arbre tandis que les autres décrivent les colonnes de la table.

L'exemple complet peut être trouvé ici.

4 commentaires:

  1. Bonjour Mickael,

    J'essaye actuellement de mettre un treeViewerColumn dans un masterDetaislBlock, mais je n'y arrive pas..
    J'arrive seulement à insérer un TreeViewer dans le masterDetailsBlock.

    J'ai suivi ton exemple ci-dessus, mais du coup plus rien ne s'affiche..

    Aurais-tu une idée de comment faire ?


    Cordialement.
    Haribo91.

    RépondreSupprimer
  2. Problème résolu !

    Haribo91.

    RépondreSupprimer
  3. Salut Haribo91,

    Peux-tu être plus explicite. ça pourrait intéresser des personnes ayant le même problème

    Merci

    Mickael

    RépondreSupprimer
  4. Salut,

    Je voulais mettre dans un masterDetailsBlock ( merci pour ton super tutorial sur ce sujet ! ) un treeViewerColumn, dans la vue master, en partant d'un Tree, le tout dans une section (org.eclipse.ui.forms).

    Pour ce faire, j'utilise un FormToolkit et la méthode
    createTree(..) de ce dernier.

    @Override
    protected void createMasterPart(final IManagedForm managedForm, Composite parent) {
    FormToolkit toolkit = managedForm.getToolkit();

    Tree tree = toolkit.createTree(client,SWT.FULL_SELECTION);
    tree.setHeaderVisible(true);
    tree.setLinesVisible(true);


    Ensuite je fais
    monToolkit.paintBordersFor(client);
    maSection.setClient(client);


    Puis
    SectionPart spart = new SectionPart(section);
    managedForm.addPart(spart);


    Tout comme dans ton tuto finalement.


    De là, je créé mon treeViewer à partir du Tree ci-dessus et je lui ajoute un contentProvider :
    TreeViewer treeViewer = new TreeViewer(tree);
    treeViewer.setContentProvider(new monContentProvider());


    Puis je créé mon treeViewerColumn à partir du treeViewer :
    TreeViewerColumn column = new TreeViewerColumn(treeViewer, SWT.CENTER);
    column.setLabelProvider(new ColumnLabelProvider() {
    ...
    }
    column.getColumn().setText("Colonne 1");


    Ensuite on définit un point d'entrée au Tree :
    treeViewer.setInput("/");


    et la taille des colonnes :
    for (int i = 0, n = tree.getColumnCount(); i < n; i++) {
    tree.getColumn(i).setWidth(200);
    }
    (attention à bien utiliser le tree pour récuperer toutes les colonnes)


    Et voilà !

    RépondreSupprimer