java - tablemodellistener - Modificar el editor de celda para diferentes filas en una JTable
seleccionar varias filas en un jtable en java (2)
Tengo una JTable
con las siguientes columnas:
rowNumber | Elemento | Cantidad
Y un JButton
que agrega filas cada vez que se hace clic. La columna Element tiene un editor de celda JComboBox
personalizado que se llena con elementos de una base de datos. Sin embargo, necesito hacer lo siguiente:
Supongamos que tengo estos elementos en el JComboBox
de la primera fila de mi tabla: Element1 Element2 Element3
Selecciono Element2 desde JComboBox
en la primera fila y luego procedo a agregar otra fila. Esta nueva fila no debe mostrar Element2 más en su JComboBox
. Y la fila anterior (primera) no debe mostrar el Elemento seleccionado en la segunda fila y así sucesivamente.
Cree un CustomCellEditor personalizado como este.
final JComboBox<String> comboBox = new JComboBox<String>();
table.getColumnModel().getColumn(1).setCellEditor(new CustomCellEditor(comboBox){
@Override
public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
DefaultComboBoxModel<String> model = (DefaultComboBoxModel<String>) comboBox.getModel();
model.removeAllElements();
{//Add what you need according the row.
model.addElement("X");
model.addElement("Y");
model.addElement("Z");
}
return super.getTableCellEditorComponent(table, value, isSelected, row, column);
}
});
Creo que puede ser útil conocer la cardinalidad esperada del Set<Element>
. En consecuencia, @mKorbel plantea la importante cuestión de la escalabilidad, citando esta discusión relacionada. En ese caso, la pregunta propone una List<DefaultCellEditor>
, cuando un renderizador mucho más simple funcionará.
Aquí, un CellEditor
puede administrar una List<DefaultComboBoxModel<Element>>
, seleccionando el modelo de combo correcto para la fila que se está editando e invocando setModel()
en el componente editor. A medida que se agrega cada nueva fila de la tabla, el editor agrega un nuevo elemento a la List
y ajusta los elementos existentes según sea necesario. Esperaría que la complejidad crezca como O (n 2 ) , donde n es la cardinalidad del Set
.