valor una seleccionar obtener modificar editable datos columnas columna celda cargar agregar java swing jtable

seleccionar - Java JTable: solo se puede editar una columna



obtener el valor de una celda jtable java (5)

Me preguntaba cómo hacer que una columna de una JTable sea editable, las otras columnas tienen que ser no editables.

He sobrescrito isCellEditable () pero esto cambia cada celda a no editable. Thnx de antemano.


Leyendo el comentario de Kleopatra (su segunda vez que sugirió echarle un vistazo a javax.swing.JXTable , y ahora lo siento, no lo eché un vistazo la primera vez :)) Te sugiero que sigas el enlace

Busqué una respuesta, y combiné varias respuestas a mi propia solución: (sin embargo, no es seguro para todas las soluciones, pero es comprensible e impulsado rápidamente, aunque recomiendo mirar el enlace de arriba)

Puede mantenerlo más flexible para establecer qué columna se puede editar o no más adelante. Lo usé para exmaple:

columnsEditable=new ArrayList<Integer>(); table=new JTable(new DefaultTableModel(){ @Override public boolean isCellEditable(int row, int col) { if(columnsEditable.isEmpty()){ return false; } if(columnsEditable.contains(new Integer(col))){ return true; } return false; } });

Y utilicé esta función para establecer editable o no:

public void setColumnEditable(int columnIndex,boolean editable){ if(editable){ if(!columnsEditable.contains(new Integer(columnIndex))){ columnsEditable.add(new Integer(columnIndex)); } }else{ if(columnsEditable.contains(new Integer(columnIndex))){ columnsEditable.remove(new Integer(columnIndex)); } } }

Nota: por supuesto, debe definir las columnas Tabla editable y JTable global en esta clase:

private JTable table; private ArrayList<Integer> columnsEditable;

Nota 2: de manera predeterminada, todas las columnas no son editables, pero ese es mi comportamiento deseado. Si desea otro elemento, puede agregar todas las columnas a columnas Editable o cambiar el comportamiento por completo (haga que las columnas ArrayListNonEditable en lugar). Con respecto a la observación de Kleopatra: es mejor no usar esta última sugerencia (pero depende del modelo de tabla utilizado y de lo que haces en el resto de tu programa).


JXTable / TableColumnExt del proyecto SwingX tiene una API para configurar editabilidad por tabla y por columna

// make the table completely read-only xTable.setEditable(false); // make a column read-only xTable.getColumnExt(index).setEditable(false);

Tenga en cuenta que solo es posible reducir la capacidad de edición en comparación con la devuelta por model.isCellEditable. Es decir, puede hacer que una celda editable sea de solo lectura, pero no al revés


puede establecer si isEditable para TableColumn o TableColumn and TableCell también

@Override public boolean isCellEditable(int row, int col) { switch (col) { case 0: case 1: return true; default: return false; } }


Anular el modelo de tabla

isCellEditable(int rowIndex, int columnIndex) toma dos argumentos, solo devuelve verdadero para la columna que desea?

public boolean isCellEditable(int rowIndex, int columnIndex){ return columnIndex == 0; //Or whatever column index you want to be editable }


esto establecería el valor editable para las columnas 3 y 8 y falso para los demás.

DefaultTableModel model = new DefaultTableModel() { boolean[] canEdit = new boolean[]{ false, false, true, false, false,false,false, true }; public boolean isCellEditable(int rowIndex, int columnIndex) { return canEdit[columnIndex]; } };