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] Afficher / Masquer des colonnes


Sujet :

Composants Java

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 200
    Points : 149
    Points
    149
    Par défaut [JTable] Afficher / Masquer des colonnes
    Bonjour à tous,

    Voilà j'ai une JTable contenant 60 colonnes, et dans un panel ailleurs dans mon code j'ai 2 JCheckBox qui correspondent chacune à 1 groupe de 30 colonnes.

    La première checkbox (que j'appelerai checkbox A) correspond aux 30 premières colonnes, et donc logiquement la checkbox B correspond aux 30 dernières colonnes).

    Mon but : lorsque je décoche une checkbox, ma JTable se "rafraichit" et seules le groupe de colonnes dont la checkbox est cochée sont affichée.

    Règle de gestion : Lorsqu'une checkbox est décochée, l'autre doit rester cochée ! (Ainsi il y aura toujours quelque chose à afficher dans la JTable)

    Je développe en JAVA 1.4, et mes données sont chargées dans un Vector qui lui même contiennent plusieurs Vector. J'utilise un modèle héritant d'un DefaultTableModel auquel j'ai redéfinit les fonctions suivantes :

    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
     
    public class TableMobileModel extends DefaultTableModel {
     
        public TableMobileModel(Vector data, Vector columnNames) {
            super(data,columnNames);
        }
     
        public boolean isCellEditable(int row, int column) {
            return true;
        }
     
        public void addRow(Vector rowData) {
            super.addRow(rowData);
        }
    }
    En ce qui concerne la vue, j'ai simplement redéfini les méthodes suivantes :

    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
     
    _tableMobile = new JTable(new TableMobileModel(_listeDataMobile, _listeColonnesMobile)) {
     
    			//@Override
    			public TableCellEditor getCellEditor(int row, int column) {
    				if (row==0) return getDefaultEditor(Boolean.class);
    				else return super.getCellEditor(row, column);
    			}
     
    			//@Override
    			public TableCellRenderer getCellRenderer(int row, int column) {
    				if (row==0) return getDefaultRenderer(Boolean.class);
    				else return super.getCellRenderer(row, column);
    			}
     
                            //@Override
                            public boolean isCellEditable(int row, int column) {
    				return true;
    			}
    		};
    Voilà ! J'aimerai si possible ne pas trop changer la structure de ce que j'ai fait en créant des TableColumnModel etc...

    Quelqu'un aurait une idée sur comment masquer les colonnes sans avoir à recharger les données lorsque celle-ci sera de nouveau affichée ?

  2. #2
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    Hello,

    Tu peux eventuellement faire ceci.
    Tu récupère la colonne en fonction du titre de son entête, ensuite tu peux la rendre visible ou non.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    TableColumnExt ext = m_table.getColumnExt("Nom de la colonne");
    ext.setVisible(true);
    a+

  3. #3
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 200
    Points : 149
    Points
    149
    Par défaut
    De quoi hérite ta classe TableColumnExt s'il te plait ?

    TableColumn ? TableColumnModel ? DefaultTableColumnModel ?

  4. #4
    Membre actif
    Profil pro
    100
    Inscrit en
    Juillet 2007
    Messages
    585
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations professionnelles :
    Activité : 100

    Informations forums :
    Inscription : Juillet 2007
    Messages : 585
    Points : 270
    Points
    270
    Par défaut
    Elle hérite de TableColumn
    mais elle provient du package org.jdesktop.swingx.table

    il te faudrait utiiser une JXTable et non pas une JTable ....

  5. #5
    Membre éprouvé Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Points : 934
    Points
    934
    Par défaut
    Règle de gestion : Lorsqu'une checkbox est décochée, l'autre doit rester cochée ! (Ainsi il y aura toujours quelque chose à afficher dans la JTable)
    Des radioButtons feraient l'affaire......

    Quelqu'un aurait une idée sur comment masquer les colonnes sans avoir à recharger les données lorsque celle-ci sera de nouveau affichée ?
    Leur donner la largeur zéro ?

  6. #6
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 200
    Points : 149
    Points
    149
    Par défaut
    Voici ce que j'ai fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    TableColumn col = EcheancierPrevisionnelPanel.getTableMobile().getColumn("AT01");
                    col.setWidth(0);
                    ((TableMobileModel)_echeancierPrevisionnel.getTableMobile().getModel()).fireTableStructureChanged();
    Résultat : rien ne se passe lorsque je décoche ma checkbox...

  7. #7
    Membre éprouvé Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Points : 934
    Points
    934
    Par défaut
    La JTable, ah, la JTable... ce serait trop simple !
    (heureusement il me reste de l'aspirine depuis mon passage sur Linux).

    essaie ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      JTableHeader header = jXTable1.getTableHeader();
      TableColumn column =  jXTable1.getColumnModel().getColumn(nuCol);    // le n° de la colonne visée
      header.setResizingColumn(column);        // this line is very important
      jXTable1.getColumnModel().getColumn(nuCol).setPreferredWidth(0); // largeur zéro
    Adapter, peut-être, je n'ai pas Netbeans sous la main.
    Bonne chance !

    D'ailleurs, je le vois maintenant, la dernière ligne devrait être simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    column.setPreferredWidth(0);
    ...je crois.

  8. #8
    Membre éprouvé Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Points : 934
    Points
    934
    Par défaut
    Correction !
    Voici un code qui marche (chez moi) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       jXTable1.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
       JTableHeader header = jXTable1.getTableHeader();
       TableColumn column =  jXTable1.getColumnModel().getColumn(nuCol);
       header.setResizingColumn(column);            // this line is very important
       column.setMinWidth(0);           // permettre une largeur zéro
       column.setWidth(0);

  9. #9
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 200
    Points : 149
    Points
    149
    Par défaut
    Merci beaucoup je vais tester ça dans l'après-midi !

    Désolé de ne pas avoir répondu plus tôt c'est que j'étais en week-end ^^

  10. #10
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    200
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 200
    Points : 149
    Points
    149
    Par défaut
    Que dire si ce n'est : MERCI !!!

    C'est parfait !!! Merci fraco !

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

Discussions similaires

  1. [LibreOffice][Tableur] Afficher/Masquer des colonnes
    Par elodiemart dans le forum OpenOffice & LibreOffice
    Réponses: 11
    Dernier message: 19/07/2013, 21h32
  2. afficher/masquer des colonnes nommées
    Par chouchouboy dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/10/2010, 14h17
  3. Afficher/masquer des colonnes d'un tableau
    Par fre3d0m dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 24/07/2009, 20h09
  4. Afficher / masquer des colonnes
    Par didier.aucun dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 10/04/2008, 00h45
  5. Afficher/masquer des colonnes : VBA vs Claire
    Par mouaa dans le forum VBA Access
    Réponses: 4
    Dernier message: 20/08/2007, 10h11

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