Masquer une ligne dans une JTable [Résolu]

Azorkin 27 Messages postés vendredi 29 juin 2007Date d'inscription 18 juillet 2007 Dernière intervention - 29 juin 2007 à 09:59 - Dernière réponse : dgidg1971 2 Messages postés vendredi 21 mars 2008Date d'inscription 29 avril 2009 Dernière intervention
- 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!
Afficher la suite 

Votre réponse

3 réponses

Meilleure réponse
Azorkin 27 Messages postés vendredi 29 juin 2007Date d'inscription 18 juillet 2007 Dernière intervention - 5 juil. 2007 à 15:21
3
Merci
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!

Merci Azorkin 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 120 internautes ce mois-ci

Commenter la réponse de Azorkin
Azorkin 27 Messages postés vendredi 29 juin 2007Date d'inscription 18 juillet 2007 Dernière intervention - 3 juil. 2007 à 09:04
0
Merci
... 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!! 
Commenter la réponse de Azorkin
dgidg1971 2 Messages postés vendredi 21 mars 2008Date d'inscription 29 avril 2009 Dernière intervention - 29 avril 2009 à 17:38
0
Merci
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é....
Commenter la réponse de dgidg1971

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.