jTable no editable

Anteriormente en la entrada jTable y su "Modelo" veiamos algunos tips de como utilizar este recurso, pero en ningún momento publique un ejemplo de como hacer que las celdas no puedan ser editadas por el usuario sin ser deshabilitadas. Para no dar tantas vueltas vamos directo al punto.

Utilizamos el método booleano para indicarle al modelo que la columna "X" sera editada y el resto no.

public boolean isCellEditable (int row, int column) {
   if (column == 3)
      return true;
   else
      return false;
}

Ahora instanciamos la tabla con el modelo

MiModelo modelo = new MiModelo();
JTable tabla = new JTable(modelo);

En caso de tener ya el modelo simplemente lo seteamos

tabla.setModel(modelo);

Pero que sucede si no tenemos una clase que defina el modelo de la tabla, sino que utilizamos un modelado por defecto (como el que explique en la entrada anterior), pues sigue siendo lo mismo, solo que extendemos la variable declarada y agregamos el método.

DefaultTableModel modelo = new DefaultTableModel()
 {@Override
     public boolean isCellEditable (int fila, int columna) {
         if (columna > 3)
             return true;
         return false;
     }
 };

Con esto indicamos que la columna del 4 (comienzan en 0) en adelante podran ser editadas, el resto no, espero sea de utilidad.

10 Comentarios

Escribir Comentario
Jose Fermin
AUTOR
27 de julio de 2010, 11:02 delete

Geniaaaaaaaaaaaaaaaaaaaaaal =D
era en el modelado por defecto y lo puse en el metodo donde lleno mi modelo desde la base de datos. por que desde el jpanel no funciona xD.

muchas gracias!!!

Responder
avatar
_CarlitoX_
AUTOR
27 de julio de 2010, 16:48 delete

De nada, no olvides comentar cualquier duda que aquí le damos solución.... suerte!

Responder
avatar
Jose Fermin
AUTOR
1 de agosto de 2010, 16:36 delete

Hola aqui ando dando lata de nuevo xD, ahora mi problema es con las fechas te pongo mi metodo.

public void insertNomina(String Ini, String Fini)
{
DateFormat df = new SimpleDateFormat("dd/MM/yyyy");
// Date ini = null;
// Date fini = null;
try
{

Date ini = (Date) df.parse(Ini);
Date fini = (Date) df.parse(Fini);

conn.createStatement();
if(conn!=null)
{
int rowsupdate = 0;
PreparedStatement stmtl = conn.prepareStatement("INSERT INTO Nominas(fechaIni," +
"fechaFini) VALUES (?,?)");

las fechas las consigo de un jFormattedTextField, si utilizo el .getValue().toString me sale error en el df.parse, si envio solo el texto .getText() me sale error en el cast

que me sugieres que pueda hacer?

Responder
avatar
_CarlitoX_
AUTOR
1 de agosto de 2010, 22:39 delete

Hola... mmmmm... primero porque trabajas con Date?, es mejor utilizar "calendar", de cualquier forma si no me equivoco te da el error porque no estas retornando bien las variables, supongo que lo que haces es llamar a un metodo y que este carga esta funcion que carga e inserta la fecha no!?

No puedo ayudarte mucho porque no se de donde sale la variable "fechaFini", tampoco se porque ese parse, ¿quiere pasar el string a date?, si es asi te estas complicando mucho, utiliza "Calendar" que mas flexible en este sentido, si puedes esperar al miercoles publico algo del manejo de fechas en Java, claro, solo hasta el miercoles porque ando algo ocupado hasta ese dia.

De cualquier forma dime que es lo que quieres hacer y para que ese metodo, que valores retorna, o si es solo para agregar algo en la BD.

Responder
avatar
_CarlitoX_
AUTOR
2 de agosto de 2010, 13:57 delete

Listo, si me dio tiempo de publicar algo referente a las fechas, de cualquier forma cualquier duda publica en esta entrada
(http://carlitoxenlaweb.blogspot.com/2010/08/fechas-en-java.html)

Responder
avatar
Jose Fermin
AUTOR
2 de agosto de 2010, 15:10 delete

a okok, pues fechaIni y fechaFini vienen de mi panel, donde el usuario introduce una fecha inicial y la final para una nomina,los valores los obtengo de un jFormattedTextField.
Utilise el date para poderlo guardar en la BD, basicamente es para eso.
Pues como lei que hay que darle el formato que uno quiere que se guarde en la base de datos por eso use el DateFormat(df), y el parse para convertir el string a date.
Gracias!!

Responder
avatar
_CarlitoX_
AUTOR
2 de agosto de 2010, 15:26 delete

Bueno, eso es válido, pero te doy un tip para que no te compliques tanto, utiliza 3 textfield, luego unelos mediante un slash ("/") y toma el valor la viariable pasandola a Date, de esta forma si te arroja algún error lo capturas con un "catch" y muestras por pantalla que la fecha no es válida, de lo contrario continua con el guardado, recuerda que siempre hay que buscar lo mas simple para el usuario y nada mas simple que introducir por separado dia, mes y año.... Suerte, y cualquier duda te invito a ver la nueva entrada, saludos

Responder
avatar
Marwuin
AUTOR
22 de agosto de 2010, 14:09 delete

Saludos, de verdad estoy todavia con dudas, resulta que tengo una tabla llamada:

"TablaInscripcion".

Declaro el modelo por defecto en variables generales:

DefaultTableModel ObjTablaInscripcion;

Consulto una BD y lleno la tabla con la informacion:

try{
ResultSet r=sentencia.executeQuery("SELECT * FROM Materia ORDER BY Trayecto,Trimestre");
String Titulos[]={"Código","Trayecto","Trimestre","Unidad Curricular","Fase","U.C.","Condición"};
ObjTablaInscripcion = new DefaultTableModel(null,Titulos);
TablaInscripcion.setModel(ObjTablaInscripcion);
String columna[]=new String[7];

while(r.next()){//lleno la tabla
columna[0]=r.getString("CodigoMateriaFase");
columna[1]=r.getString("Trayecto");
columna[2]=r.getString("Trimestre");
columna[3]=r.getString("NombreMateria");
columna[4]=r.getString("Fase");
columna[5]=r.getString("UC");
ObjTablaInscripcion.addRow(columna);//Añade fila
ObjTablaInscripcion = (DefaultTableModel) TablaInscripcion.getModel();
}

} catch (Exception e) {
JOptionPane.showMessageDialog(null, "Error al consultar la tabla Materia");
}


Necesito desabilitar las celdas que yo desee...

¿donde me recomienda colocar el codigo que usted propones?.. Saludos y exito..

Responder
avatar
_CarlitoX_
AUTOR
22 de agosto de 2010, 19:29 delete

Puedes hacerlo declarando el método junto con el objeto, igual que como en el ejemplo haces:

DefaultTableModel ObjTablaInscripcion (y aqui comienzas).....

Responder
avatar
CARRASCO
AUTOR
27 de enero de 2012, 17:28 delete Este comentario ha sido eliminado por el autor.
avatar

Lamentablemente hay muchos usuarios en la red que han llegado al blog para escribir obscenidades, así que la moderación se hace necesaria. Recuerda utilizar un lenguaje correcto y espera a que sea aprobado.

Si necesitas publicar código haz click en "Conversión" para hacerlo legible.
ConversiónConversión EmoticonEmoticon