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.
Recibe notificaciones por correo
10 Comentarios
Escribir ComentarioGeniaaaaaaaaaaaaaaaaaaaaaal =D
Responderera 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!!!
De nada, no olvides comentar cualquier duda que aquí le damos solución.... suerte!
ResponderHola aqui ando dando lata de nuevo xD, ahora mi problema es con las fechas te pongo mi metodo.
Responderpublic 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?
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!?
ResponderNo 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.
Listo, si me dio tiempo de publicar algo referente a las fechas, de cualquier forma cualquier duda publica en esta entrada
Responder(http://carlitoxenlaweb.blogspot.com/2010/08/fechas-en-java.html)
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.
ResponderUtilise 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!!
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
ResponderSaludos, de verdad estoy todavia con dudas, resulta que tengo una tabla llamada:
Responder"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..
Puedes hacerlo declarando el método junto con el objeto, igual que como en el ejemplo haces:
ResponderDefaultTableModel ObjTablaInscripcion (y aqui comienzas).....
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