Pregunta

Cada vez que hago un procesador de celdas personalizado para un JList, cualquier elemento que añadir a ella no siempre responden a las acciones. Por ejemplo, si tengo el procesador de celdas devolver un JPanel con elementos en él, uno de los cuales tiene un ActionListener, que no responde en absoluto.

¿Por qué es esto?

¿Fue útil?

Solución

El elemento que regrese como un procesador de lista de células está destinado a exactamente eso: renderizado . Registrar detectores con el JList (por lo general, usted querrá un ListSelectionListener).

Otros consejos

El procesador puede verse como una fábrica para el retorno de los componentes de las células, pero en realidad sigue el prestación de peso mosca enfoque y utiliza el mismo componente para la prestación de todas las células (se supone que cada llamada a getListCellRendererComponent() para volver a configurar la misma instancia de componente para una célula específica y volver de manera que las células se puede representar).

De esta manera, se puede tener JList (así como JTable y JTree) mostrar enorme cantidad de células sin tener que instanciar componentes para cada celda. Como efecto secundario, el componente de render no puede responder a eventos, ya que sólo se utiliza durante el bucle de render, pero no aparece en el árbol de componentes.

Al igual que Neil Coffey dijo, se puede añadir sus oyentes a la JList (JTable, JTree) en su lugar, y el uso de los métodos de ayuda (locationToIndex(...), getCellBounds(...)) para despachar el que las células se vio afectada y así hacer frente a la lógica específica de células.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top