Bonjour,

Je dois trier une colonne de manière un peu particulière.
En fait ma colonne contient des Strings, qui peuvent contenir du texte ou un entier converti en chaîne de caractères.

Lorsque je trie les éléments, si j'ai 2 entiers, je dois les comparer comme des entiers, dans tous les autres cas je dois comparer les 2 valeurs sous forme de String.

Pour cela j'ai créer un RowSorter que j'affecte à ma colonne :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
TableRowSorter<MonTableModel> sorter = new TableRowSorter<MonTableModel>((MonTableModel) maTable.getModel());
sorter.setComparator(2, new NumeroPositionComparator());
maTable.setRowSorter(sorter);
Et voici le comparateur (qui fonctionne comme je le souhaite)
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
private class NumeroPositionComparator implements Comparator<String> {
		@Override
		public int compare(String no1, String no2) {
			Integer numero1 = null;
			boolean isNo1Number = true;
			Integer numero2 = null;
			boolean isNo2Number = true;
 
			try {
				numero1 = Integer.valueOf(no1);
			} catch (NumberFormatException e) {
				LOG.error(e.getMessage(), e);
				isNo1Number = false;
			}
 
			try {
				numero2 = Integer.valueOf(no2);
			} catch (NumberFormatException e) {
				LOG.error(e.getMessage(), e);
				isNo2Number = false;
			}
 
			if (isNo1Number && isNo2Number) {
				return numero1.compareTo(numero2);
			} else if (isNo1Number) {
				return 1;
			} else if (isNo2Number) {
				return -1;
			} else {
				return no1.compareTo(no2);
			}
		}
	}
Le problème est que mes valeurs sont toujours triées en alphanumérique, à savoir :

10
110
120
20
30
310
40
....

Bien qu'en debug, je passe dans mon comparateur qui compare bien des entiers et non des strings.

Qqun a-t-il une idée de ce qu'il me manque ou de ce que je fais faux ?

Merci d'avance pour votre aide