Foros del Web » Programación para mayores de 30 ;) » Java »

Problemas con JTable y java.util.date

Estas en el tema de Problemas con JTable y java.util.date en el foro de Java en Foros del Web. Hola a todos, me he implementado una clase para general el modelo de una JTAble, la clase se llama ContactosJTableModel y extiende a la clase ...
  #1 (permalink)  
Antiguo 13/06/2008, 02:20
 
Fecha de Ingreso: noviembre-2007
Mensajes: 121
Antigüedad: 16 años, 5 meses
Puntos: 0
Problemas con JTable y java.util.date

Hola a todos, me he implementado una clase para general el modelo de una JTAble, la clase se llama ContactosJTableModel y extiende a la clase AbstractTableModel. Este modelo toma los datos de entrada de una base de datos y los muestra en un JTable. Todas las celdas son editables de tal manera que se permite modificar directamente sobre la vista de a tabla. Uno de los campos de la tabla es tipo date y está en el formato yyyy-mm-dd (en la bse de datos). En el modelo de la tabla he especificado que el tipo de dato es java.util.date, de tal manera que cuando la tabla vaya a mostrar ese dato lo muestre x ejemplo como 13-jun-2008 (imagino que eso lo sabe la clase jtable cuando ve el campo que quiere enseñar es un date).

Cuando leo el dato de la base de datos, lo que hago es que lo convierto a java.util.date (java.util.date(result.getObject(i + 1))).


El problema que tengo es que al mostrar la tabla, se ven las fechas bien (13-jun-2008), pero cuando pico sobre un campo de estos para modificarlo se me cambia el formato automaticamente a 2008-06-13 y claro falla la validacion de la celda y tengo q reescribirlo de nuevo al fomrato 13-ju-2008.

Yo creo que es porque al hacer la conversion del java.sql.date al java.util.date no especifico que cambie el formato, pero no se como hacer esto, ya que he estado mirando x ahi y he visto cosas para trabajar con formatos de fechas en string pero no es lo que quiero ya que yo quiero que la tabla me muestre un tipo date para que cuando alguien introduzca datos no meta cualquier cosa.

Espero haberme explicado bien, a ver si me pueden ayudar, sino me intentare explicar con más claridad.

Saludos
  #2 (permalink)  
Antiguo 13/06/2008, 09:49
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Problemas con JTable y java.util.date

Hola:

El JTable por un lado tiene un TableCellRenderer y por otro un TableCellEditor. El primero es el encargado de pintar el texto en la celda del JTable. El segundo de proporcionar el editor cuando editas.

El problema es que el TableCellEditor por defecto siempre proporciona un JTextField como editor sin ningún tipo de comprobación. Además, devuelve siempre un String y posiblemente por eso es por lo que al editar o después de editar se te fastidia el tema.

Para evitarlo, debes hacerte tu propio TableCellEditor para los Date, de forma que ya controlas tú el formato y el tipo de dato devuelto. En el enlace tienes un ejemplo.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 13/06/2008, 11:23
 
Fecha de Ingreso: noviembre-2007
Mensajes: 121
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Problemas con JTable y java.util.date

Muchas gracias, voy a probarlo.

Saludos
  #4 (permalink)  
Antiguo 13/06/2008, 12:39
 
Fecha de Ingreso: noviembre-2007
Mensajes: 121
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Problemas con JTable y java.util.date

Estoy intentando pelearme con lo que me has comentado pero no lo consigo. Te cuento lo que he hecho, me he creado una clase

public class EditorDateTable extends java.util.Date implements TableCellEditor

la idea es que el objeto sea una fecha (un date en fomrato 12-may-2008, que es como se muestra cuando no se esta editando), en el metodo: public Component getTableCellEditorComponent(JTable tabla, Object valor, boolean isSelected, int fila, int columna), cojo el objeto valor (que es donde está el dato que se edita se supone) lo convierto a String e intento meterlo como la fecha haciendo this.setdate... pero no se como hacerlo, para empezar no consigo pasarlo al date (entiendo que el formato en el que me viene lo que esta en valor es 2008-12-12 que es como se ve ahora cuando edito) una vez consiga eso supongo que tengo que devolver el this.

Luego no entiendo muy bien del resto de metodos que tengo que implmentar y me he mirado la api y los ejemplos pero no lo entiendo bien si pudieras orientarme un poco te lo agradeceria.

Gracias
  #5 (permalink)  
Antiguo 13/06/2008, 14:43
 
Fecha de Ingreso: noviembre-2007
Mensajes: 121
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Problemas con JTable y java.util.date

A ver al final he hecho lo siguiente, pongo el codigo de la clase:


public class EditorDateTable extends AbstractCellEditor implements TableCellEditor
{

final SimpleDateFormat formato=new SimpleDateFormat("dd-MM-yyyy");
private String fecha=null;
private JTextField campo=new JTextField();


public EditorDateTable() {
// TODO Auto-generated constructor stub
super();
}
public Component getTableCellEditorComponent(JTable tabla, Object valor, boolean isSelected, int fila, int columna)
{

fecha=(valor == null) ? "" : formato.format(valor);
campo.setText( fecha );
return campo;
}
public void cancelCellEditing()
{}
public boolean shouldSelectCell(EventObject e) {
return true; //La celda que está siendo editada debe estar seleccionada
}
public Object getCellEditorValue()
{
return fecha;
}
public boolean isCellEditable(EventObject e)
{
return true;
}
public boolean stopCellEditing()
{
return true;
// return edicionFinalizada();
}


La idea es intentar que el editor sea un combo de texto igual que el por defecto sólo que me devuelva el dato tipo fecha y así evitar el problema que me surgia, pero con el codigo que he puesto no consigo que funcione igual, para empezar no me funciona la tecla tabulador para cambiar de celda cuando termino la edicion.Además me deja por defecto el formato del combo de texto en las eldas, y cuando cambio de celda se pierde el valor que he puesto, ¿podrias echarme un cable?

Gracias
  #6 (permalink)  
Antiguo 13/06/2008, 16:16
 
Fecha de Ingreso: noviembre-2007
Mensajes: 121
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Problemas con JTable y java.util.date

He solucionado el tema del control añadiendo un listener al jtexfield. El problema es que ahora cuando termino de editar y le doy al abulador para cambiar de celda me sale esta excepción,

xception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: Cannot format given Object as a Date
at java.text.DateFormat.format(Unknown Source)
at java.text.Format.format(Unknown Source)
at javax.swing.JTable$DateRenderer.setValue(Unknown Source)
at javax.swing.table.DefaultTableCellRenderer.getTabl eCellRendererComponent(Unknown Source)
at javax.swing.JTable.prepareRenderer(Unknown Source)
at javax.swing.plaf.basic.BasicTableUI.paintCell(Unkn own Source)
at javax.swing.plaf.basic.BasicTableUI.paintCells(Unk nown Source)
at javax.swing.plaf.basic.BasicTableUI.paint(Unknown Source)
at javax.swing.plaf.ComponentUI.update(Unknown Source)
at javax.swing.JComponent.paintComponent(Unknown Source)
at javax.swing.JComponent.paint(Unknown Source)
at javax.swing.JComponent.paintToOffscreen(Unknown Source)
at javax.swing.BufferStrategyPaintManager.paint(Unkno wn Source)
at javax.swing.RepaintManager.paint(Unknown Source)
at javax.swing.JComponent._paintImmediately(Unknown Source)
at javax.swing.JComponent.paintImmediately(Unknown Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unkno wn Source)
at javax.swing.RepaintManager.paintDirtyRegions(Unkno wn Source)
at javax.swing.RepaintManager.seqPaintDirtyRegions(Un known Source)
at javax.swing.SystemEventQueueUtilities$ComponentWor kRequest.run(Unknown Source)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilter s(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(U nknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source),

estoy pescando bastante .
  #7 (permalink)  
Antiguo 13/06/2008, 22:05
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 6 meses
Puntos: 454
Respuesta: Problemas con JTable y java.util.date

Hola:

Con formato.format(valor) no puedes convertir un Object a String. Tendrás que verficar si ese Object valor es un Date para convertirlo

Código:
if (valor instanceof Date)
   fecha = formato.format((Date)valor));
Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #8 (permalink)  
Antiguo 14/06/2008, 02:29
 
Fecha de Ingreso: noviembre-2007
Mensajes: 121
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: Problemas con JTable y java.util.date

Hola a todos, el problema no era ese, eso lo habia corregido ya, al final consegui que rulara. EL problema era al guardar los datos en el metodo setValueAt del modelo de la tabla, que no habia tenid en cuenta que lo que mandaba el combo era una String y tenia que pasarla a formato fecha para guardarlo en la estructura de datos.

Gracias de todas maneras.
Saludos
  #9 (permalink)  
Antiguo 21/11/2010, 21:23
 
Fecha de Ingreso: noviembre-2010
Ubicación: huaura
Mensajes: 2
Antigüedad: 13 años, 5 meses
Puntos: 0
Respuesta: Problemas con JTable y java.util.date

hola yo tengo este problema haber si me ayudan plisssss mira yo tengo un datatime en MySQL pro lo kiero mostrar en jtable en netbeans pero no puedo acr k m muestre ese dato que tengo en mi base de datos ayudenmeeee plis como hago??????? plis es urgenteeeeeeee!!!!!!!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:41.