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 :

Savoir qu'une JTable a été triée


Sujet :

Composants Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Par défaut Savoir qu'une JTable a été triée
    Bonjour,

    j'ai un léger problème et j'espère que quelqu'un va pouvoir m'aider ^^

    Je suis actuellement en train de travailler sur un programme qui nécessite l'utilisation d'une JTable.
    Ma JTable est contenue dans une vue. Et j'ai un modèle qui contient la liste des éléments contenus à l'intérieur de la table.

    Lorsque je trie ma table en cliquant sur le header d'une colonne, la colonne se trie correctement mais je n'arrive pas à mettre à jour l'ordre des éléments de la liste du modèle car je n'arrive pas à trouver un listener qui permet de savoir qu'une table vient d'être triée. Existe-t-il un tel listener? Si non, avez-vous une solution qui pourrait résoudre ce problème?

    Je vous remercie d'avance pour votre aide

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    table.getRowSorter().addRowStorerListener() ?

  3. #3
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Par défaut
    Oui, j'ai déjà essayé avec ça

    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
    public class SorterListener implements RowSorterListener {
     
    	private JTable table;
    	private CenterController controller;
     
    	public SorterListener(JTable table, CenterController controller) {
    		this.table = table;
    		this.controller = controller;
    	}
     
    	@Override
    	public void sorterChanged(RowSorterEvent e) {
    		System.out.println("Column No= "
    				+ table.getRowSorter().getSortKeys().get(0)
    						.getColumn());
     
    		System.out.println("test = "
    				+ ((DefaultTableModel) table.getModel()).getValueAt(0, 1));
     
    		//on met à jour la liste des éléments
    		controller.modifyListOrder(table);
     
    	}
    }
    mais j'ai l'impression que le tri n'a pas encore été effectué lorsque sorterChanged est appelé. En effet, lorsque j'affiche la valeur de la table de la cellule (0,1), je remarque qu'elle correspond à la valeur d'avant le tri.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 483
    Par défaut
    Il n'y a pas d'ordre garantis pour l'appel des listeners, donc il est tout à fait possible (mais pas certains) que le listener de la table soit appelée après.

    La doc de RowSorterEvent dit que tu dois attendre que event.getType() soit Type.SORTED pour pouvoir interroger le RowSorter (event.getSource()) sur le nouveau tri.

  5. #5
    Membre habitué
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2012
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Distribution

    Informations forums :
    Inscription : Avril 2012
    Messages : 8
    Par défaut
    Je pense avoir un début de solution. En fait lorsque j'appelle mon contrôleur pour modifier la liste, je créé une nouvelle liste d'éléments et je parcours ma table. J'ajoute alors les éléments au fur et à mesure dans ma nouvelle liste.

    Donc pour tester la récupération des valeurs de la table, j'avais mis l'affichage suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("musique = " + ((DefaultTableModel) table.getModel()).getValueAt(0, 1));
    Et là je voyais que le nom de la musique n'avait pas changé.

    Mais si je mets plutôt ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("musique = " + ((DefaultTableModel) table.getModel()).getValueAt(table.convertRowIndexToModel(0), 1));
    Alors là je récupère bien la musique qui est la première de la table après le tri.

    Je vais tester ça demain et on verra bien ^^


    EDIT : ok c'est bon, il fallait bien utiliser table.convertRowIndexToModel(i) ^^

    Merci pour ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. focus dans une cellule d'une JTable
    Par coil dans le forum Composants
    Réponses: 5
    Dernier message: 07/07/2010, 18h15
  2. [JTable] savoir si une cellule est selectionnée
    Par lipao17 dans le forum Composants
    Réponses: 10
    Dernier message: 27/05/2010, 17h44
  3. Comment savoir qu'une fonction est standard ?
    Par D[r]eadLock dans le forum C
    Réponses: 5
    Dernier message: 24/03/2003, 15h42
  4. [VB6] [Impression] Savoir si une imprimante est installée
    Par Norm59ttp dans le forum Installation, Déploiement et Sécurité
    Réponses: 2
    Dernier message: 19/12/2002, 10h29
  5. Réponses: 4
    Dernier message: 10/09/2002, 18h09

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