Azorkin
Messages postés27Date d'inscriptionvendredi 29 juin 2007StatutMembreDernière intervention18 juillet 2007
-
29 juin 2007 à 09:59
dgidg1971
Messages postés2Date d'inscriptionvendredi 21 mars 2008StatutMembreDernière intervention29 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).
Azorkin
Messages postés27Date d'inscriptionvendredi 29 juin 2007StatutMembreDernière intervention18 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!
Azorkin
Messages postés27Date d'inscriptionvendredi 29 juin 2007StatutMembreDernière intervention18 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!!
dgidg1971
Messages postés2Date d'inscriptionvendredi 21 mars 2008StatutMembreDernière intervention29 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:
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.