Bonjour,

J'ai une application RCP avec une vue contenant un tableau, et j'aimerais pouvoir trier ce tableau en cliquant sur les colonnes.
J'ai essayé d'implémenter ceci à l'aide d'un viewerComparator, mais ça me rajoute des lignes dans mon tableau.

Voici ce que j'ai :
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
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
 
abstract class MyViewerSorter extends ViewerComparator {
	public static final int ASC = 1;
 
	public static final int NONE = 0;
 
	public static final int DESC = -1;
 
	private int direction = 0;
 
	private TreeViewerColumn column;
 
	private TreeViewer viewer;
 
	public MyViewerSorter(TreeViewer viewer, TreeViewerColumn column) {
		this.column = column;
		this.viewer = viewer;
		this.column.getColumn().addSelectionListener(new SelectionAdapter() {
 
			public void widgetSelected(SelectionEvent e) {
				if( MyViewerSorter.this.viewer.getComparator() != null ) {
					if( MyViewerSorter.this.viewer.getComparator() == MyViewerSorter.this ) {
						int tdirection = MyViewerSorter.this.direction;
 
						if( tdirection == ASC ) {
							setSorter(MyViewerSorter.this, DESC);
						} else if( tdirection == DESC ) {
							setSorter(MyViewerSorter.this, NONE);
						}
					} else {
						setSorter(MyViewerSorter.this, ASC);
					}
				} else {
					setSorter(MyViewerSorter.this, ASC);
				}
			}
		});
	}
 
	public void setSorter(MyViewerSorter sorter, int direction) {
		if( direction == NONE ) {
			column.getColumn().getParent().setSortColumn(null);
			column.getColumn().getParent().setSortDirection(SWT.NONE);
			viewer.setComparator(null);
		} else {
			column.getColumn().getParent().setSortColumn(column.getColumn());
			sorter.direction = direction;
 
			if( direction == ASC ) {
				column.getColumn().getParent().setSortDirection(SWT.DOWN);
			} else {
				column.getColumn().getParent().setSortDirection(SWT.UP);
			}
 
			if( viewer.getComparator() == sorter ) {
				viewer.refresh();
			} else {
				viewer.setComparator(sorter);
			}
 
		}
	}
 
	public int compare(Viewer viewer, Object e1, Object e2) {
		return direction * doCompare(viewer, e1, e2);
	}
 
	protected abstract int doCompare(Viewer viewer, Object e1, Object e2);
}
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
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
public class VueListe extends ViewPart{
	private TreeViewer viewer;
	private ModeleImpl modele;
 
	public void createPartControl(Composite parent) {
		modele = new Modele();		
		viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL
				| SWT.V_SCROLL);
		viewer.setContentProvider(new Liste());	
		Tree tree = viewer.getTree();
 
		final TreeViewerColumn colNom = new TreeViewerColumn(viewer, SWT.CENTER);
		colTache.setLabelProvider(new ColumnLabelProvider() {
			public String getText(Object element) {
				if (element instanceof Personne) {
					Personne per = (Personne) element;
					return per.getNom();
				}
				return null;
			}
		});
		colNom.getColumn().setText("Nom");
		MyViewerSorter cSorter = new MyViewerSorter(viewer,colNom) {
			protected int doCompare(Viewer viewer, Object e1, Object e2) {
				Personne p1 = (Personne) e1;
				Personne p2 = (Personne) e2;
				return p1.getNom().compareToIgnoreCase(p2.getNom());
			}
 
		};
 
		TreeViewerColumn colPrenom = new TreeViewerColumn(viewer, SWT.CENTER);
		colPrior.setLabelProvider(new ColumnLabelProvider() {
			public String getText(Object element) {
				if (element instanceof Personne) {
					Personne p = (Personne) element;
					return p.getPrenom();
				}
				return null;
			}
		});
		colPrior.getColumn().setText("Prenom");
 
		// Provide the input to the ContentProvider
		viewer.setInput(modele);
 
		for (int i = 0, n = tree.getColumnCount(); i < n; i++) {
			tree.getColumn(i).setWidth(100);
		}
 
		tree.setHeaderVisible(true);
		tree.setLinesVisible(true);
 
		// Expand the tree 
		viewer.expandAll();
 
	}
Qu'est-ce qui est faux? Y a-t-il une meilleure façon d'effectuer un tri?

Merci beaucoup