martes, 10 de diciembre de 2013

ActionPerformed JTable y cancelar edición JTable

El código siguiente les ayudara a permitir la edición de solo ciertas filas y/o columnas además que permite una propiedad semejante al ActionPerformed que tanto hace falta en el JTable. 
Crearemos un nuevo modelo para nuestro JTable. 
DefaultTableModel nuevo_modelo = new DefaultTableModel() {          
};
Dentro editaremos el método isCellEditable. Mediante if's ustedes pueden guiar al sistema que columnas y/o filas pueden ser editados. 
public boolean isCellEditable(int fila, int columna) {            
if (columna > 2 && columna <4) {
return true;                    
}
return false;
} 
El modelo quedaria de la siguiente forma. 
DefaultTableModel nuevo_modelo = new DefaultTableModel() {
@Override
public boolean isCellEditable(int fila, int columna) {                        
if (columna > 2 && columna <4) {
return true;                    
}
return false;
}           
};
El método isCellEditable, Se comporta como ActionPerformed ya que cada vez que se intenta escribir en el JTable este pregunta si es editable.Lo único que tenemos que hacer es agregar nuestros métodos antes del if. 
DefaultTableModel nuevo_modelo = new DefaultTableModel() {
@Override
public boolean isCellEditable(int fila, int columna) { 
System.out.println("Se esta intentando editar la fila: "+fila+". Y la columna: "+columna);
Metodo(); //Aqui podemos agregar todo lo que necesitemos que realize la tabla al ser editada.
if (columna > 2 && columna <4) {
return true;                    
}
return false;
}           
};
Finalmente solo agregamos el modelo a nuestra tabla y nuestras columnas. Siguiendo el ejemplo el modelo solo permitirá la edición de la columna Cantidad. 
jTable.setModel(nuevo_modelo);
nuevo_modelo.addColumn("Numero");
nuevo_modelo.addColumn("Codigo");
nuevo_modelo.addColumn("Descricion");
nuevo_modelo.addColumn("Cantidad");
nuevo_modelo.addColumn("Almacen");