2010-12-16 141 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數據類型的其他表。

希望這會有所幫助!