2009-04-13 4 views
6

Toute fois que je fais une CellRenderer personnalisée pour un JList, tous les éléments que j'ajouter à cela ne jamais répondre à des actions. Par exemple, si j'ai le renderer de cellules retourner un JPanel avec des éléments sur lui, dont l'un a un ActionListener, il ne répond pas du tout.Java Swing - rendu cellulaire JList personnalisé - actions capture

Pourquoi est-ce?

+1

Très bonne question. Je pensais que cela pouvait avoir quelque chose à voir avec ItemListeners, mais maintenant je ne le pense pas ... J'ai essayé de trouver un exemple de code mais je n'ai pas réussi. – Uri

+0

Salut, je fais face au même problème, êtes-vous capable de résoudre le problème? – user236501

Répondre

6

L'élément que vous renvoyez sous la forme d'un rendu de cellule de liste est conçu exactement pour cela: Rendu. Enregistrez les écouteurs avec le JList (généralement, vous aurez besoin d'un ListSelectionListener).

11

Le moteur de rendu peut ressembler à une usine de composants de retour pour les cellules, mais en fait, il suit la masselotte rendu approche et utilise le même composant pour rendre toutes les cellules (chaque appel à getListCellRendererComponent() est censé reconfigurer la même instance de composant pour une cellule spécifique et renvoyez-la afin que la cellule puisse être rendue). De cette façon, vous pouvez avoir JList (ainsi que JTable et JTree) afficher une quantité massive de cellules sans avoir à instancier des composants pour chaque cellule. En tant qu'effet secondaire, le composant de rendu ne peut pas répondre aux événements, car il n'est utilisé que pendant la boucle de rendu, mais n'apparaît pas dans l'arborescence des composants.

Tout comme Neil Coffey dit, vous pouvez ajouter vos auditeurs à la JList (JTable, JTree) à la place, et d'utiliser les méthodes d'aide (locationToIndex(...), getCellBounds(...)) d'envoyer cette cellule a été affectée et donc faire face à la logique spécifique des cellules.

+1

+1 pour une explication correcte – basszero

+1

Pensez au composant rendu en tant que tampon en caoutchouc. –

Questions connexes