IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Composants Java Discussion :

JTable - annulation ou réapplication d'un tri


Sujet :

Composants Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 10
    Par défaut JTable - annulation ou réapplication d'un tri
    Bonjour,
    J'ai une JTable avec des données, et aprés un rafraîchissement des données, je n'arrive pas à trouver un moyen d'annuler (réinitialisation des tableheaders) ou de rafraîchir un tri qui a été effectué à partir d'un clic sur une en-tête de colonne...
    En modifiant le vector des données, j'effectue un fireTableDataChanged sur le table model, ça me change bien les données dans ma JTable, mais en vrac, le tri est perdu alors que l'en-tête de colonne indique toujours qu'un tri est actif.
    Ca me paraît être un problême tout bête mais je n'ai encore rien trouvé par google...
    Comment annuler le tri soit disant actif ?
    Ou comment dire au JTable "hé... refais moi un tri sur ce qu'il a en ce moment dans la JTable" ?

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 10
    Par défaut
    J'ai essayé les instructions suivantes mais sans succés :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    coTable.updateUI();
    coTable.repaint();
     
    coTable.getTableHeader().updateUI();
    coTable.getTableHeader().repaint();
     
    coTable.sortColumn(null);
    coTable.sortColumn(-1);
     
    coTable.sorterChanged(new RowSorterEvent(null));
    L'instruction sortColumn est celle qui se rapproche le plus de ce que je cherche mais le signe "ascendant"/"descendant" reste visible sur la colonne où le filtre s'appliquait, même si le header de cette colonne n'est plus en état enfoncé.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 10
    Par défaut

    Décidement... pas moyen de trouver.
    Est-ce si compliqué que ça ?
    Si quelqu'un a une piste ou l'instruction, merci de me poster l'information.

  4. #4
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Bonjour, tu devrais utiliser une des 3 méthodes de tri java.util.Collections.sort afin de trier ton Vector directement

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 10
    Par défaut
    Merci. J'y ai pensé, mais cela ne fait que reporter mon problème car dans ce cas, je dois savoir sur quel colonne s'applique le tri et son sens... Ca me paraissait plus compliqué à trouver que d'annuler tout les tris du Jtable.
    Je sais faire tout ça en C#, mais en Java je n'arrive pas à mettre la main sur une instruction du type <reset sorting>, <reset header>, <resort>. J'ai l'impression d'être un peu à la masse à chercher sans trouver un truc aussi basique.
    Une autre piste à me suggérer ?

  6. #6
    Modérateur
    Avatar de dinobogan
    Homme Profil pro
    ingénieur
    Inscrit en
    Juin 2007
    Messages
    4 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : ingénieur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 4 073
    Par défaut
    Citation Envoyé par swonder Voir le message
    J'ai l'impression d'être un peu à la masse à chercher sans trouver un truc aussi basique.
    A la masse, non. J'ai le même problème sur une application. Un bouton permet de rendre visible/invisible les lignes sélectionnées et le tri est perdu. J'ai cherché un peu, sans résultat. Pour le moment j'ai laissé le bug ouvert
    Au départ, j'utilisais la JXTable du projet SwingX, qui n'a pas ce problème.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java
    Que la force de la puissance soit avec le courage de ta sagesse.

  7. #7
    Membre Expert
    Avatar de CheryBen
    Inscrit en
    Mai 2005
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mai 2005
    Messages : 1 599
    Par défaut
    Après quelques recherches, j'ai trouvé table.getRowSorter pour obtenir l'objet responsable du tri. Par contre il est indiqué que si le modèle de données change, la méthode modelStructureChanged et le tri est refait, ce qui devrait être ton cas.

    Peut-être que cela peut t'aider à avancer? que se passe-t-il si tu invoques toi mêmes cette méthode? (même si ce n'est pas son but comme indiqué dans la javadoc)

  8. #8
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Jamais eu de problème dans mes tableaux après raffraichissement des données. Quand on se sert d'un DefaultTableModel tout se fait tout seul ou il faut simplement faire les bons fire...

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 10
    Par défaut
    Je n'utilise hélas pas un DefaultTableModel car c'est une reprise d'application écrite en Java 1.4 et les concepteurs de cette merveille ont utilisé une classe à eux un peu partout dans leur projet :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class BusinessTableModel extends AbstractTableModel
    Pour la méthode modelStructureChanged(), c'est une méthode abstraite de la classe RowSorter qui n'est implémentée nulle part. En l'invoquant ça me sort une Exception de type NullPointer.
    Même exception en utilisant la fonction allRowsChanged() de la même classe.
    Je veux bien l'implémenter mais je ne sais pas mettre quel code dedans...

    Je cherche dans la piste suivante en ce moment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    coTable.setRowSorter(coTable.getRowSorter()); // coTable est ma JTable
    coTable.setRowSorter(null);
    J'ai aussi tenté le coup avec un fireStructureChanged mais ça me détruit toute la mise en forme de la JTable... je me demande si l'instruction n'est pas quelque part au niveau du JTable.getTableHeader().

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 10
    Par défaut
    J'ai trouvé un truc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    	TableColumn column;
    	SortBusinessTableHeaderRenderer tcr;
    	for (int i = 0; i < coTable.getColumnCount(); i++)
    	{
    		column = coTable.getColumnModel().getColumn(i);
    		tcr = (SortBusinessTableHeaderRenderer) (column.getHeaderRenderer());
    		tcr.setPressedColumn(-1);
    		tcr = null;
    		column = null;
    	}
    	coTable.getTableHeader().repaint();
    	coTable.getTableHeader().updateUI();
    Ce petit bout de code permet de supprimer l'état enfoncé des colonnes... c'est déjà ça... par contre la petite flêche indiquant le sens du tri (ascendant, descendant) est toujours là. J'hallucine.

  11. #11
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Et tu peux pas essayer de changer ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class BusinessTableModel extends AbstractTableModel
    en ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class BusinessTableModel extends DefaultTableModel
    Ca va peut-être fonctionner... (mais faut bien tester ensuite).

  12. #12
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par natha Voir le message
    Et tu peux pas essayer de changer ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class BusinessTableModel extends AbstractTableModel
    en ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    public class BusinessTableModel extends AbstractTableModel
    Juste une question, histoire de confirmer que je ne suis pas aveugle...
    Tu vois une différence entre les 2 ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 10
    Par défaut
    je ne vois non plus aucune différence collègue.
    (j'eu été tenté de précéder cette phrase par un de ces fameux "salut mes amis" du copain à nono le petit robot )
    Plus sérieusement, je pense qu'il voulait me faire faire un extends de DefaultTableModel. Je vais voir si ça peux se faire mais j'ai peur que avec le bourbier de programme que j'ai en face de moi les effets de bords soient trop conséquents.

  14. #14
    Membre Expert
    Avatar de natha
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2 346
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2 346
    Par défaut
    Citation Envoyé par OButterlin Voir le message
    Juste une question, histoire de confirmer que je ne suis pas aveugle...
    Tu vois une différence entre les 2 ?
    J'ai corrigé... dur dur le matin désolé

    Citation Envoyé par swonder Voir le message
    Plus sérieusement, je pense qu'elle voulait me faire faire un extends de DefaultTableModel
    Bien vu à part que je suis un mec.

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 10
    Par défaut
    Corrigé et auto-flagellé pour la mégarde...

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    10
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 10
    Par défaut
    Je viens de tester... ça ne change rien. Les prédécésseurs dans le programme ont redéfinis pas mal de méthodes du TableModel à leur manière, afin de faire un lien avec les données (Vector d'objet) en base en utilisant une définition écrite dans un fichier XML. (Je sais pas si c'est super clair ce que je viens de raconter...).

    Je suis quand même un peu surpris : n'est-ce donc pas tout simple de réinitialiser la table header ? juste ça, tout simplement...

Discussions similaires

  1. Tri JTable
    Par tit_oune dans le forum Composants
    Réponses: 4
    Dernier message: 12/04/2006, 17h14
  2. [JTable] Tri des données
    Par soulhouf dans le forum Composants
    Réponses: 7
    Dernier message: 08/09/2005, 15h01
  3. [JTable] tri alphabétique
    Par clairette dans le forum Composants
    Réponses: 1
    Dernier message: 27/07/2005, 12h09
  4. [JTable] Annuler le deplacement des colonnes
    Par tit_henry dans le forum Composants
    Réponses: 4
    Dernier message: 11/05/2005, 18h42
  5. [JTable] Tri des colonnes
    Par djskyz dans le forum Composants
    Réponses: 10
    Dernier message: 17/03/2005, 11h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo