Pregunta

Estaba buscando una respuesta para una pregunta anterior y tuve una ingeniosa idea que superar un límite en JTable . Necesito que el editor sea diferente fila por fila, mientras que JTable solo puede manejar un solo editor para cada columna.

Entonces, mi idea es usar un MouseListener para verificar la fila y la columna en el JTable y establecer un nuevo editor cada vez.

Pero, llamar a setCellEditor () por segunda vez no tiene ningún efecto. El editor sigue siendo el primero que se configuró. Entonces, ¿cómo puedo hacer " setCellEditor " ¿trabaja por segunda vez para la misma columna?

Aquí está el código en MouseListener .

public void mouseClicked(MouseEvent e) {
    int cols = resultTable.columnAtPoint(new Point(e.getX(), e.getY()));
    int rows = resultTable.rowAtPoint(new Point(e.getX(), e.getY()));
    StorageObject item = (StorageObject) resultTable.getModel().getValueAt(rows, cols);
    TableColumn col = resultTable.getColumnModel().getColumn(cols);
    col.setCellEditor(new MyComboBoxEditor(item.list));
}
¿Fue útil?

Solución

No estoy seguro de por qué su código no funciona (ha pasado un tiempo desde que hice Swing), pero ¿por qué no se anula?

public TableCellEditor getCellEditor(int row, int column)

¿En tu JTable? Mantenga un mapa de los cuadros combinados que desea usar para cada fila y, en su método anulado, devuelva el correcto.

Otros consejos

Mi teoría es que cuando se invocan todos los oyentes de mouse registrados en Table / TableCell, los que están instalados en las clases API por defecto se invocarán primero, antes que su oyente de mouse. Esto significa que el evento que provoca la recuperación del editor se producirá antes de configurarlo en uno diferente. Algo así como una condición de carrera, solo que en realidad está definida en algún lugar del código fuente de la API ... Esa es mi ingenua teoría y ya puedo ver algunos agujeros en ella, así que a mi solución:

Anular JTable.getCellEditor (int fila, int col) . Esto le permite devolver el editor que desee para cualquier celda.

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