2010-12-16 13 views
5

Estoy obteniendo datos para el DB y mostrando en una tabla.JTable cell rendering

Mi getColumnClass es

@Override 
public Class<? extends Object> getColumnClass(int column) { 
    return getValueAt(0, column).getClass(); 
} 

al imprimir el valor, me sale el nombre de clase como java.sql.Timestamp, pero cuando se muestre que estoy tengo un problema, sólo se muestran dd/MM/yyyy, pero necesito que muestre dd/MM/aaaa HH: mm, ¿cómo puedo lograr esto?

Aparte de hacer esto, tengo que comprobar si el DataTime es menor que el de hoy y luego desactivar la fila

+0

Disculpe si entiendo su problema incorrecto, pero debe leer http://download.oracle.com/javase/tutorial/uiswing/components/table.html - puede establecer renderizadores personalizados para sus celdas de tabla (para mostrar otro formato de fecha) y editores personalizados (si su fila no está "deshabilitada"). – nokul

Respuesta

1

he encontrado una solución, y aquí está

@Override 
     public Class<? extends Object> getColumnClass(int column) { 
      String value = getValueAt(0, column).getClass().toString(); 

      if (value.equalsIgnoreCase("class java.sql.Timestamp")) { 
       return JTextField.class; 
      } 

      return getValueAt(0, column).getClass(); 
     } 

¿Hay una mejor manera de ¿hazlo?

3

Sé que esta es una pregunta muy antigua, pero estaba teniendo un problema muy similar y decidí publicar una mejor solución para el problema.

primer lugar, debe definir una clase nueva: TimestampCellRenderer.java

package gui; 

import java.text.DateFormat; 
import java.text.SimpleDateFormat; 
import javax.swing.table.DefaultTableCellRenderer; 

public class TimestampCellRenderer extends DefaultTableCellRenderer { 

    DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); 

    public TimestampCellRenderer() { 
     super(); 
    } 

    public void setValue(Object value) { 
     if (formatter == null) { 
      formatter = DateFormat.getDateInstance(); 
     } 
     setText((value == null) ? "" : formatter.format(value)); 
    } 
} 

Y luego, en la clase de interfaz gráfica de usuario, añadir esta definición a su clase:

yourTable.getColumnModel().getColumn(1).setCellRenderer(new TimestampCellRenderer()); 

En este caso, decidí formatear la primera columna, pero sería una buena práctica definir una constante en su modelo de tabla.

La mejor parte de esto es que puede reutilizar su código con otras tablas que hagan uso del tipo de datos Timestamp.

Espero que esto ayude!