Masquer une ligne dans une JTable

Résolu
Azorkin Messages postés 27 Date d'inscription vendredi 29 juin 2007 Statut Membre Dernière intervention 18 juillet 2007 - 29 juin 2007 à 09:59
dgidg1971 Messages postés 2 Date d'inscription vendredi 21 mars 2008 Statut Membre Dernière intervention 29 avril 2009 - 29 avril 2009 à 17:38
Bonjour tlm,




Je suis quelque peu agacé par ma JTable depuis qq jours... Je cherche depuis un moment (2 jours), mais pas de solutions ...



Bon je me lance.




J'ai une JTable (toute basique, fabriqué a coups de String [][]), avec
son DefaultTableCellRenderer, tout marche niveau fonctionnalité, mais
un détail graphique m'énerve...




Je voudrais masquer certaines lignes, mais les masquer TOTALEMENT. Pour
l'instant, ça fonctionne avec ca : table.setRowHeight(row, 1);



mais en reduisant la taille de la ligne, les bords ne disparaissent pas
eux, et donc si je cache 100 lignes, je me retrouve avec un bloc tout
laid.



Bon, je suis conscient que je pourrais m'arranger de me fabriquer une
table temporaire, mais c'est vraiment pas pratique dans mon appli (et
surtout très lourd au vu des tableaux que je me trinballe).



Merci de votre aide!

3 réponses

Azorkin Messages postés 27 Date d'inscription vendredi 29 juin 2007 Statut Membre Dernière intervention 18 juillet 2007
5 juil. 2007 à 15:21
Bon, puisqu'il n'y a eu aucunes reactions, et pensant au pauvre
programmeur tombant sur ce post en esperant trouver la solution au
problème qui hante ces nuits, je vais raconté un peu ma vie en
expliquant comment j'ai fait mon compte.


POur faire ma JTable, j'utilisais un double tableau de string. Mais en
le fabriquant avec des vecteurs (Vector<Vector<String>>)
c'est plus commode de le manipuler, et donc en utilisant un vecteur
temporaire le tour était joué!


bon, c'est lent, c'est pas bien original m'enfin ya pas le choix!
3
Azorkin Messages postés 27 Date d'inscription vendredi 29 juin 2007 Statut Membre Dernière intervention 18 juillet 2007
3 juil. 2007 à 09:04
... Personne ne sait quoi faire, ou tout le monde trouve ca sans
interets? Le mieux c'est de donner signe de vie, sinon je vais penser
que mon post est passé à travers le forum!! 
0
dgidg1971 Messages postés 2 Date d'inscription vendredi 21 mars 2008 Statut Membre Dernière intervention 29 avril 2009
29 avril 2009 à 17:38
Bonjour, Je réagis un peu tard: Il existe une façon de masquer les lignes d'une table en utilisant un TableRowSorter<MyTableModel> et un RowFilter<MyTableModel, Integer>.
Le RowFilter à ajouter au TableRowSorter détermine quelle ligne est visible et quelle ligne ne l'est pas. Chaque fois que les lignes auront changé, il suffira d'appeler la méthode sort() de l'objet implementé par la class RowFilter.

Voici le code:
Dans ma classe implémentant ma JTable, j'ai les variables de classe de ma table myJTable , de son model myTableModel et du row sorter myRowHider:

    private JTable myJTable = null;

    private MaskableTableModel myTableModel;
    private TableRowSorter<MaskableTableModel> myRowHider;
.....

Dans la méthode d'init, j'ai l'initialisation de myJTable et l'ajout du row sorter qui suit:

            /*
             * Row sorter qui cache les lignes non visible de la table définies dans son model
             */
            myRowHider = new TableRowSorter<MaskableTableModel>(myTableModel){
                /* On évite le tri automatique des colonnes si besoin
                 * (non-Javadoc)
                 * @see javax.swing.DefaultRowSorter#isSortable(int)
                 */
                @Override
                public boolean isSortable(int column) {
                    return false;
                }
               
            };
            /*
             * Filtre qui cache les lignes non visible

             * Il fait appel à la méthode ajoutée au model MaskableTableModel:


             * isVisibleRow(rowIndex) qui dit si la ligne i est visible ou pas (pour i>=0)



             * On remarquera que entry.getIdentifier() retourne l'entier correspondant

             * à l'indexe de la ligne en cours car le type Integer est utilisé en paramètre de classe.

             */

            myRowHider.setRowFilter(new RowFilter<MaskableTableModel, Integer>(){
                /* Hide non visible rows
                 * (non-Javadoc)
                 * @see javax.swing.RowFilter#include(javax.swing.RowFilter.Entry)
                 */
                @Override
                public boolean include(
                        javax.swing.RowFilter.Entry<? extends MaskableTableModel, ? extends Integer> entry) {
                    MaskableTableModel tableModel = entry.getModel();
                    if (tableModel.isVisibleRow(entry.getIdentifier())) {
                        return true;
                    }
                    return false;
                }
            });
            myJTable.setRowSorter(myRowHider);

Voila, et le tour est joué....
0
Rejoignez-nous