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 :

Tri JTable : exclure une ligne


Sujet :

Composants Java

  1. #1
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut Tri JTable : exclure une ligne
    Bonjour,

    J'utilise le tri d'une JTable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    table.setAutoCreateRowSorter(true);
    J'ai l'idée d'ajouter une ligne de totalisation en fin de la table, cependant je souhaite que cette ligne soit exclue du tri, et reste donc toujours en bas de table.
    Une idée ?

  2. #2
    Membre confirmé
    Avatar de william44290
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juin 2009
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 400
    Points : 575
    Points
    575
    Par défaut
    Perso je colle des 255 dans l'index. Je ne vais pas l'encontre du tri je l'utilise.

  3. #3
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Je ne vois pas comment cette technique laisse la ligne de totalisation toujours à la fin, que le tri de la colonne soit ascendant ou descendant.

  4. #4
    Membre confirmé
    Avatar de william44290
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Juin 2009
    Messages
    400
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France

    Informations professionnelles :
    Activité : Responsable de service informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 400
    Points : 575
    Points
    575
    Par défaut
    Bah je colle des 000 lorsqu'il est descendant et des 255 lorsqu'il est ascendant.

  5. #5
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Ok, je teste. Merci

  6. #6
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Sans doute m'y prends-je mal, mais le résultat ne me satisfait pas.
    D'une part, ajouter des \0 ou des \255 dans la chaine provoque l'affiche de petits carrés du plus mauvais effet.
    Ensuite, pour savoir si le tri est ascendant ou descendant, j'ai ajouté un listener:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
              TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel>(table.getModel());   
              //table.setAutoCreateRowSorter(true);
              table.setRowSorter(sorter);
              RowSorterListener rsl = new RowSorterListener(){
                  public void sorterChanged(RowSorterEvent e) {
                    bSortAsc = ! bSortAsc ; 
    System.out.println("Sort:"+bSortAsc);                
                  }
              };
    Seulement à chaque clic sur l'entete, l'évèneme nt se déclenche 2 fois, ce qui a pour résultat de laisser mon booleen dan sle même état.

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Il te faut créer ton Propre Comparator qui va mettre la valeur correspondant au total systématiquement supérieure à chaque valeur.

    Puis tu affecte ce Comparator à une des colonnes du TableRowSorter via la méthode
    (Hint: il faut bien sur que ton Comparator ait une référence sur le modèle de la table, ou du moins la valeur du total, bien sûr).

  8. #8
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Oui, mais comment indiquer au comparateur que la valeur spécial est celle se trouvant sur la dernière ligne dans la table ?...
    Et puis, la valeur de la ligne de totalisatino est de type numérique (somme,moyenne, etc.) donc je ne peut rien ajouter de non numérque

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Tu prends une référence sur ta JTable, et tu fais un getValueAt(table.getRowCount()-1, indexColonne), tu vérifie si une des deux valeurs est égale au retour et le tour est joué...

  10. #10
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    ça marche à condition que la somme soit différente de toutes les valeurs à sommer :
    10
    10
    -20
    0
    10
    10 <- ici la somme = 10 + 10 + -20 + 0 +10

  11. #11
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Désolé, mais cela prend de plus en plus la transparance d'une montagne de goudron pour moi...
    Ce que je retiens pour l'instant, c'est qu'il n'y a aucun moyen simple d'extraire une ligne du tri.
    De plus, quel que soit le caractère que j'ajoute devant la valeur de totalisation, 0 ou 255, la ligne passe un coup en haut de tableau, un coup en base selon l'ordre du tri.
    bref, je n'arrive à rien.

  12. #12
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Le plus propre serait effectivement d'extraire la dernière ligne et de l'afficher dans un second JTable sans entête, juste en dessous le premier JTable.

  13. #13
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Oui mais lorsque l'utilisateur permutte les colonnes ou change la largeur de la première table ?...

  14. #14
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Oui mais lorsque l'utilisateur permutte les colonnes ou change la largeur de la première table ?...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TableColumnModel model = laVraieJTable.getColumnModel();
    laJTableAvecLaSomme.setColumnModel(model);

  15. #15
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Alors là, l'avantage qui me saute tout de suite aux yeux, et le fait d'avoir la ligne de totalisation toujours visible, sans avoir besoin de scroller en bas de table.

  16. #16
    Membre expérimenté Avatar de herve91
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 282
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 282
    Points : 1 608
    Points
    1 608
    Par défaut
    Citation Envoyé par SheikYerbouti Voir le message
    Alors là, l'avantage qui me saute tout de suite aux yeux, et le fait d'avoir la ligne de totalisation toujours visible, sans avoir besoin de scroller en bas de table.
    En effet ! c'est comme un JTableHeader sauf que c'est en bas... JTableBottom ?

  17. #17
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Cela me plait. J'adopte

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

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Points : 12 977
    Points
    12 977
    Par défaut
    Me souvenais bien avoir déjà vu la solution quelque part:

    http://www.jroller.com/santhosh/entr...th_summary_row

    C'est pas le comparateur qu'il faut refaire, mais carrément implémenter un nouveau TableRowSorter.

  19. #19
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    Merci à tous
    J'ai définitivement adopté la solution de la seconde JTable, car elle permet d'afficher en permanence la ligne de totalisation sans avoir à scroller en bas de table principale.
    Le dernier détail qui me chiffone, e'st lorsque j'utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    table2.setColumnModel(table1.getColumnModel());
    pour synchroniser les headers (ordre et largeur des colones), cela synchronize aussi le label des headers, hors j'utilise des labels différents pour la table de total (Somme,Nombre,Moyenne,etc.)
    Une dernière idée ?

  20. #20
    Expert éminent sénior
    Avatar de SheikYerbouti
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    6 760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 6 760
    Points : 11 862
    Points
    11 862
    Par défaut
    j'ai bien esssayé ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
           tabcol  = table1.getColumnModel().getColumn(i) ;
           tabcolT = table2.getColumnModel().getColumn(i) ;         
           tabcolT.setPreferredWidth(tabcol.getPreferredWidth());
           tabcolT.setMinWidth(tabcol.getMinWidth());
           tabcolT.setMaxWidth(tabcol.getMaxWidth());
           tabcolT.setModelIndex(tabcol.getModelIndex());
    Mais la dernière instruction - setModelIndex - semble inefficiente, à moins qu'il ne manque encore une instruction pour alerter le header du changement ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [JTable] Laisser une ligne fixe dans un tri
    Par Fanuilos dans le forum Composants
    Réponses: 3
    Dernier message: 10/04/2009, 12h26
  2. [JTable] colorier une ligne de manière simple
    Par _KB_ dans le forum Composants
    Réponses: 10
    Dernier message: 16/06/2006, 13h51
  3. [JTable] ajouter une ligne
    Par maminova77 dans le forum Composants
    Réponses: 6
    Dernier message: 26/03/2006, 19h28
  4. [JTable] ajouter une ligne
    Par rvfranck dans le forum Composants
    Réponses: 3
    Dernier message: 30/03/2005, 14h25
  5. [JTable] Supprimer une ligne d'un jtable
    Par Orionmel dans le forum Composants
    Réponses: 5
    Dernier message: 05/11/2004, 22h29

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