afficher un JLabel+icone dans une cellule [JTable] - Java - Programmation
Marsh Posté le 29-02-2004 à 05:21:27
Alors, manifestement, tu a raté l'explication sur les renderer (de JTable ou de JList, c'est la même architecture) et particulièrement sur les renderers par défaut.
Le principe du renderer c'est de rendre le composant plus léger en mémoire en ne nécessitant pas un composant graphique par case du "machin" et d'accélérer les traitements. Naturellement, si tu as vraiment envie tu peux le faire, mais en oubliant pas de mettre le composant dans la hiérarchie swing par un add(), et que ça va être très lent à cause du revalidate().
La grosse feinte c'est que DéfaultBiduleCellRenderer hérite de JLabel (si c'est vrai : http://java.sun.com/j2se/1.4.2/doc [...] derer.html ).
Le principe d'utilisation de ce bordel est le suivant : le bidule a un renderer unique. Quand il veut faire un peu de peinture, va peindre case par case. Pour chaque case, il appelle getTableCellRendererComponent() qui lui renverra un Component, qu'il va placer au bon endroit et qu'il va peindre, puis il va l'oublier. La feinte c'est donc de renvoyer tout le temps le même composant qu'on aura customisé en fonction de la cellule qu'il représente. Et java invente la peinture au pochoir.
Pour aller encore plus loin, DefaultBiduleRenderer est lui-même un composant, donc la feinte c'est de customiser directement le renderer et de faire renvoyer this par getTableCellRendererComponent().
un peu de pratique :
Code :
|
et voilou.
un peu de lecture :
http://java.sun.com/j2se/1.4.2/doc [...] derer.html
qui explique le mécanisme
http://java.sun.com/docs/books/tut [...] l#renderer
l'article du tutorial sur les renderer customs
http://java.sun.com/docs/books/per [...] ls.fm.html
performance des renderers
Marsh Posté le 29-02-2004 à 08:10:49
nraynaud a écrit : Et java invente la peinture au pochoir. |
Je le note, et je m'en vais corriger ça de ce pas
Marsh Posté le 29-02-2004 à 09:11:18
kadreg a écrit : |
gni ?
en fait c'est pas comme ça qu'ils le décrivent, j'ai vu ça après, ils disent que le renderer est "a rubber-stamp", un tampon.
Marsh Posté le 29-02-2004 à 13:17:04
merci raynaud !!! ca fait plasir de voir quelqu'un qui masterise les interfaces grpahiques (enfin tu dois maitriser certainement d'autres choses je suppose... )
Je vasi tester ce bordel de ce pas !!!
Marsh Posté le 29-02-2004 à 13:42:50
alors voila j'ai fait ca, ca fait pareil qu'avant, mais je en peux pas selectionner une ligne entière dans ma JTable !
Code :
|
quand je clique sur la JTable, ca me selectionne la bonne ligne, mais ca ne selectionne que la colonne de droite et moi je voudrais que ca selectionne les 2 .
a mon avis le problème se situe plutot au niveau des colonnes...
vous etes surs que ca doit marcher ca?
Code :
|
normalement oui mais on sait jamais...
Marsh Posté le 29-02-2004 à 14:27:17
bon finalement j'ai reussi a faire ce que je voulais mais c'est vraiment crados de chez crados !!!
Code :
|
c'est bourrin mais ca marche...
Marsh Posté le 29-02-2004 à 18:23:39
spitagor a écrit :
|
ça doit pas être loin d'être la bonne méthode, mais je ne me souviens plus exactement.
Marsh Posté le 28-02-2004 à 12:58:44
Voila je voudrais integrer un JLabel avec icone dans ma JTable
Un peu comme quand on fait rechercher des fichiers sous windows, dans les resultats, le nom de fichier est associé a son icone.
je fais ca dans mon MyTableRenderer :
et le problème c'est que ca m'affiche bien le JLabel mais pas l'icone qui lui est associée !!!
DOnc si vous aviez une idée pour qu'il s'affiche...
mais a mon avis le problème n'est pas que la :
voivi mon code qui initialise le renderer et a vrai dire j'ai un peu de mal avec les tablecolumn
Si vous pouviez m'clairer un peu pasque la doc est un peu chaude la...
Message édité par spitagor le 28-02-2004 à 13:02:58