2010-12-16 138 views
5

我正在获取数据并显示在表中。JTable单元格渲染

我的getColumnClass是

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

当我打印的价值,我得到的类名作为java.sql.Timestamp中,但是当它显示我有一个问题,它只是显示DD/MM/yyyy,但我需要它显示dd/MM/yyyy HH:mm,我该如何实现这一目标?

除了做这个,我需要检查,如果DATATIME是比今天较少然后禁用行

+0

对不起,如果我明白你的问题不对,但你应该阅读http://download.oracle.com/javase/tutorial/uiswing/components/table.html - 你可以为你的表格单元设置自定义的渲染器(用于显示另一种日期格式)和自定义编辑器(如果你的行不是“禁用”)。 – nokul 2010-12-17 11:57:21

回答

1

我找到了解决办法,在这里它是

@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(); 
     } 

有没有更好的办法做它?

3

我知道这是一个非常古老的问题,但我有一个非常类似的问题,并决定发布一个更好的解决方案的问题。

首先,你应该定义一个新类: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)); 
    } 
} 

,然后在GUI类,这个定义添加到您的类:

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

在这种情况下,我决定以格式化第一列,但在表格模型中定义常量将是一种非常好的做法。

这最好的部分是,您可以重复使用您的代码与使用Timestamp数据类型的其他表。

希望这会有所帮助!