Bonjour,
Je cherche à détecter un clic sur le titre d'une colonne d'une JTable, le but étant de trier les lignes merci d'avance !
Bonjour,
Je cherche à détecter un clic sur le titre d'une colonne d'une JTable, le but étant de trier les lignes merci d'avance !
Sur la JTable tu as une méthode getTableHeader() qui te renvoie un objet de type JTableHeader : comme cette classe hérite de JComponent, tu peux lui associer un MouseListener.
merci pour ta réponse ! tout à fait d'accord, mais en fait je viens de trouver une solution qui me conviens à "98%" ici : http://java.sun.com/docs/books/tutor...e.html#sorting
il suffit d'ajouter les trois lignes indiquées et l'on peut trier sa table.
Par contre à la première compilation j'ai obtenu un avertissement "unckecked ..." je sais plus quoi, qui a disparu aux compilations suivantes.
L'inconvénient, c'est que le tri est alphabétique et non numémique donc on obtiens un tri bizard pour les chiffres 9>854123>45>111111111 par exemple, si tu as idée pour effectuer un tri correcte dans le cas des nombres...
Salut,
Je connaissais pas TableSorter et je viens de jetter sur le tutorial. En fait c'est basé sur ce que je te proposais, puisque pour associer le "sorter" à la table ils font :
et ensuite cette méthode fait (entre autres choses) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part sorter.setTableHeader(table.getTableHeader());
Je pense que l'interet de leur proposition est une modélisation qui permet de réaliser le tri dans une classe qui encapsule le modèle de la table.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 this.tableHeader = tableHeader; this.tableHeader.addMouseListener(mouseListener);
En utilisant leur classe TableSorter, j'ai l'impression que tu peux définir des comparator spécifiques, en utilisant la méthode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part public void setColumnComparator(Class type, Comparator comparator)
J'ai eu l'occasion récemment d'utiliser ce TableSorter (gain de temps non négligeable).
Ton lien propose seulemt une demo de cette classe.
Voici l'implémentation complète de TableSorter avec notament la résolution de tes problèmes de comparaison.
Si tu veux faire simple, la classe est véritablement utilisable telle quelle !
http://java.sun.com/docs/books/tutorial/uiswing/components/example-1dot4/TableSorter.java
c'est exactement cette classe que je suis en train d'utiliser...
Le problème c'est que je ne vois pas quelles sont les adaptations à faire pour permettre de trier également des entiers et non uniquement des String (voir mon poste plus haut).
Dans la méthode getComparator, tu peux tester le comparator à utiliser sur ta colonne... Donc à toi de faire en sorte que sur les colonnes numériques ce soit un comparateur numérique (avec de simples > < par exemple)Envoyé par FFF
je vois pas ce que tu veux dire... en fait j'ai l'impression qu'il croit (le programme) que mes cellules sont toutes des String... bien que je mette des Integer...
Si tu as récupéré le code entier tu dois voir la méthode que je cite précédemment.Envoyé par FFF
De la manière tu vois la méthode setColumnComparator(Class, Comparator). Bon elle sert juste à remplir une HashMap de comparators donc les clés sont les types de tes colonnes.
Tu peux donc jouer avec cette dernière méthode pour mettre le comparator que tu souhaites pour chaque type de données.
Puis la méthode getComparator récupère le type d'une colonne et va cher cher dans cette HashMap le comparator que tu lui as attribué.
Le plus simple pour des entiers serait par exemple de modifier getComparator pour qu'en fonction du numéro de colonne il retourne le comparator souhaité en écrivant les num de colonne en dur.
AinsiBon, le plus élégant serait tout de même de faire ça de manière plus dynamique et on peut entrevoir 1 ou 2 solutions pour cela (pas trop le temps de rentrer plus en détail, sorry)...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 if(column == 3) { return myIntComparator; }
sans rentrer dans le détail normalement, cette classe TableSorter effectue aussi le tri des entiers, cf la démo java, donc je vois pas franchement d'où vient l'erreur
démo tri de table (lancé à partir de java web start) : http://java.sun.com/docs/books/tutor...TableDemo.jnlp
dans mon programme j'insers les nombres en tant que integer :
Code : Sélectionner tout - Visualiser dans une fenêtre à part tabl.setValueAt(new Integer(Integer.parseInt(result[1].toString())),p,1);//taille
Dans ton implémentation de ton TableModel pour ta JTable, as tu redéfini la méthode getColumnClass(int column) ? (Et il y a fort à parier que par défaut elle te retourne String).Envoyé par FFF
TableRowSorter<TableModel> sorter =
new TableRowSorter<TableModel>(<votreTable>.getModel());
<votreTable>.setRowSorter(sorter);
maintenant à l'utilisation si par exemple comme moi vous vouliez double clicker sur une ligne pour ouvrir un navigateur n'utiliser pas le Model!! mais bien le controleur (Jtable)
exemple:<votreTable>.getValue.At(indice ligne,indice colonne)![]()
Partager