varias una tablemodellistener seleccionar seleccionada propiedades obtener los filas fila ejemplo desde datos como codigo boton actualizar java swing jtable

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 .