Pergunta

Toda vez que eu faço um renderizador de célula personalizado para uma JList, quaisquer elementos que eu adicionar a ele não sempre responder às ações. Por exemplo, se eu tiver o renderizador de célula retornar um JPanel com elementos nela, um dos quais tem um ActionListener, ele não responder a todos.

Por que isso?

Foi útil?

Solução

O item que você retornar como um renderizador de célula lista destina-se exatamente isso: renderização . Registrar ouvintes com a JList (geralmente, você vai querer um ListSelectionListener).

Outras dicas

O processador pode ser parecido com uma fábrica para o regresso de componentes para as células, mas na verdade ele segue o flyweight renderização abordagem e usa o mesma componente para renderizar todas as células (cada chamada para getListCellRendererComponent() é suposto reconfigure a mesma instância do componente para uma célula específica e devolvê-lo de modo que a célula pode ser processado).

Dessa forma, você pode ter JList (bem como JTable e JTree) exibir enorme quantidade de células sem ter que componentes instanciar para cada célula. Como efeito colateral, a lata componente não responder a eventos render, uma vez que só é usado durante o ciclo render, mas não aparece na árvore de componentes.

Assim como Neil Coffey disse, você pode adicionar os seus ouvintes ao JList (JTable, JTree) em vez, e usar os métodos auxiliares (locationToIndex(...), getCellBounds(...)) para expedição que celular foi afetada e, portanto, lidar com lógica específica celular.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top