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
L'exemple complet peut être trouvé ici.
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);La première colonne appelée Métier / Nom contient l'arbre tandis que les autres décrivent les colonnes de la table.
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");
...
L'exemple complet peut être trouvé ici.
Bonjour Mickael,
RépondreSupprimerJ'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.
Problème résolu !
RépondreSupprimerHaribo91.
Salut Haribo91,
RépondreSupprimerPeux-tu être plus explicite. ça pourrait intéresser des personnes ayant le même problème
Merci
Mickael
Salut,
RépondreSupprimerJe 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à !