Question

Chaque 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 je le CellRenderer retourner un JPanel avec des éléments sur elle, l'un qui a un ActionListener, il ne répond pas du tout.

Pourquoi est-ce?

Était-ce utile?

La solution

L'article que vous revenez en tant que CellRenderer de liste est destinée à exactement cela: rendu . Inscrivez-vous aux auditeurs l'JList (en général, vous aurez besoin d'un ListSelectionListener).

Autres conseils

Le moteur de rendu peut ressembler à une usine de composants de retour pour les cellules, mais en fait, il suit l'approche poids mouche rendu et utilise le même composant pour le rendu toutes les cellules (chaque appel à getListCellRendererComponent() est censé reconfigurer la même instance de composant pour une cellule spécifique et le retourner afin que la cellule peut être rendue).

De cette façon, vous pouvez avoir JList (ainsi que JTable et JTree) affichent quantité massive de cellules sans avoir à instancier les composants pour chaque cellule. Comme un effet secondaire, le composant rendu ne peut pas répondre à des événements, car il est utilisé uniquement pendant la boucle de rendu, mais ne figure pas dans l'arborescence des composants.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top