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 :

Enregistrer déplacement des colonnes dans le Table Model


Sujet :

Composants Java

  1. #1
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Par défaut Enregistrer déplacement des colonnes dans le Table Model
    Bonsoir,

    J'ai une JTable dans la quelle j'autorise le déplacements des colonnes. Je peux faire une sauvegarde de la JTable en sauvegardant les vecterus data et colunmIdentifier de DefaultTableModel.
    J'aimerais bien savoir comment enregistrer dans le DefaultTableModel la modification de l'ordre des colonnes. En fait, je voudrais retrouver la JTable modifiée (les colonnes modifiées, pour le reste c'est déjà fait) une fois que je réouvre la JTable après l'avoir sauvegardée.

    Merci d'avance pour les réponses.

    Bien à vous.

    Yoann

  2. #2
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    http://tips4java.wordpress.com/2009/...mn-reordering/

    Plus un système qui va sauvegarder l'arrangement des colonnes dans un fichier local à chaque déplacement de colonne , et le restaurer à chaque affichage (éventuellement tu peux garder l'ordre en mémoire afin de ne pas avoir à charger le fichier si tu as déjà affiché la table)

    Et pour avoir un listener écoutant le déplacement des colonnes: http://www.java2s.com/Tutorial/Java/...eComponent.htm

  3. #3
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Par défaut
    Merci pour ta réponse et désolé de répondre si tard.

    J'ai pas bien compris la page que tu m'a envoyée. Il faut que je fasse une classe qui hérite de JTable et que j'implémente la fonction reorderColumn?

    Mais n'existe-t-il pas déjà une fonction dans JTable ou autre pour déplacer les colonnes.
    Parce que l'on peut déplacer les colonnes dans ma JTable, mais quand je sauvegarde la JTable ça ne garde pas l'ordre des colonne. Et comme je fais une sauvegarde des vecteurs Data et columnIdentifier de ma Table model, j'aimerais que la modification de l'ordre des colonnes,faite sur l'interface graphique de la JTable, modifie aussi les vecteurs Data et columnIdentifier de ma Table model.

    Pour le listener, j'avais vu ça, mais je n'arrivais pas à faire la modif dans les vecteur Data et columnIdentifier de ma TableModel.

    Merci encore.

  4. #4
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Par défaut
    Alors en fait, j'ai fini par faire moi-même une méthode qui change les colonnes dans les Vecteurs Data et columnIdentifier dans ma TableModel.

    Et j'appelle cette méthode quand une colonne est bougé grace à un TableColumnModelListener. Voilà!

    Merci à toi sinok!

    Malheureusement j'ai une autre question.
    Ma JTable se trie grace à un TableRowSorter. Seulement, le trie n'est pas fait dans les vecteurs de ma TableModel, comment je récupère le trie fait par le TableRowSorter?

  5. #5
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Bah en passant par le getValueAt de la JTable...

  6. #6
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Par défaut
    Ouais, mais si je fais un getValueAt, ça va me renvoyer les valeurs de mes vecteurs de ma TableModel, et pas ceux, triés, que l'on voit dans la JTable.

    En fait c'est plutot comment mettre à jour le model avec la vue (qui est triée avec le TableRowSorter).

  7. #7
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Par défaut
    Alors euh...

    En fait la méthode que j'ai utilisée pour les colonnes ne marche pas
    Ce qui se passe, c'est quand je déplace ma colonne avec ses données, au moment de l'échange des deux colonnes, les données de l'une vont dans les données de l'autres.
    Cependant, si je sauvegarde, ferme et réouvre la JTable, les colonnes sont bien échangées, et avec les données au bon endroit!
    C'est un problème de vue, pourtant j'ai essayer les différents fire.. et un table.getTableHeader().resizeAndRepaint(); mais la vue ne change pas, à part si j'ajoute une colonne à ma table. Là, la vue se remet bien.

  8. #8
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Ce sont deux choses différentes en fait.

    Ton modèle est ton modèle. Aucun besoin d'en bouger les colonnes. De fait, il est amplement préférable que les données ne soient pas triées dans le modèle en lui même, et que l'ordre des colonnes reste toujours le même.

    Donc, sauvegarde les données d'un côté, et la configuration de la table d'une autre.
    Un fichier pour les données brutes.
    Un fichier de config pour ta table, contenant l'emplacement des colonnes et la colonne sur laquelle s'effectue le tri.

  9. #9
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Par défaut
    Ouais c'est pas faux, je pourrais le faire.
    Cependant, ma JTable est distinée à être exportée au format csv, enfin, plutôt les données de la vue donc les vecteurs du modèle. C'est pour cela que je veux garder les données triées dans mon modèle.
    De plus, les vecteurs sont stocké dans une base de données. Ils seront aussi chargé depuis la base de données, du coup, je préfère les avoir triés avant de les enregistrer dans la base données ce qui me permet de ne pas avoir à les trier à chaque chargement.

    En faite le but final étant que l'utilisateur rajoute et ordonne les données comme il le veut, et, une fois cela fait, il l'enregistre dans la base de données.

  10. #10
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    A moins d'utiliser un order by dans tes requêtes, tu ne dois en aucun cas espérer que la base trie ses données selon l'ordre d'insertion. Une base stocke, mais n'ordonne pas et n'assure en aucun cas l'ordre des données sorties dans un select (hors clause order by).

    Pour ton histoire de sortie en fichier csv, si tu veux qu'il reproduise l'ordre voulu, il faut boucler sur les lignes de la JTable en appelant le getValueAt de la JTable et non celui du modèle. Celui de la JTable propose les données ordonnée selon ce que l'utilisateur a appliqué sur la JTable (déplacement de colonnes, tri, filtres & autres), alors que celui du modèle te donne accès aux données brutes sans ordre ni filtre quelconque.

  11. #11
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Par défaut
    Pour la dataBase ce n'est pas du SQL c'est un fichier xml propriétaire, du coup, il m'enregistre les données dans l'ordre que je lui donne.
    Je savais pas que la méthode getValueAt de la JTable donnait les données triés! Merci du renseignement.

    Du coup, je pense que je vais enregistrer les valeurs dans ma base en passant par la JTable, j'aurais ainsi l'ordre des colonnes et le tri. Non?

  12. #12
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    C'est l'idée.

  13. #13
    Membre averti
    Inscrit en
    Mai 2009
    Messages
    33
    Détails du profil
    Informations forums :
    Inscription : Mai 2009
    Messages : 33
    Par défaut
    Merci beaucoup sinok pour les informations. J'ai réussi à faire ce que je voulais.

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

Discussions similaires

  1. [WD11] comment inserer automatiquement des colonnes dans une table
    Par incomparable dans le forum WinDev
    Réponses: 3
    Dernier message: 31/08/2009, 14h51
  2. [WD10-WD12] Insérer des colonnes dans une table
    Par Amanck dans le forum WinDev
    Réponses: 6
    Dernier message: 18/07/2008, 11h23
  3. Pb avec déplacement des colonnes dans Access
    Par sabredebois dans le forum IHM
    Réponses: 10
    Dernier message: 01/07/2008, 01h49
  4. Ordre des colonnes dans une table
    Par c.langlet dans le forum Administration
    Réponses: 3
    Dernier message: 16/05/2007, 19h39
  5. Réponses: 1
    Dernier message: 22/12/2005, 10h03

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