2010-12-16 7 views
5

DBのデータを取得してテーブルに表示しています。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、どのように私はこれを達成することができますか?より良い方法にはあり

別にこれをやってから、私はその行

+0

ご迷惑をおかけして申し訳ございませんが、http://download.oracle.com/javase/tutorial/uiswing/components/table.htmlを参照してください。あなたの表セルにカスタムレンダラを設定することができます別の日付形式)とカスタムエディタ(あなたの行が「無効」ではない場合)。 – nokul

答えて

1

私は解決策を見つけを無効datatimeが今日よりも小さいかどうかをチェックする必要があり、ここでは

@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

これは非常に古い質問ですが、私は非常によく似た問題を抱えていて、問題のより良い解決策を投稿することに決めました。

まず、あなたは新しいクラスを定義する必要があります:あなたのGUIクラスで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)); 
    } 
} 

そして、あなたのクラスに、この定義を追加します。この場合、

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

を、私が決めました最初の列を書式設定することはできますが、テーブルモデルで定数を定義することは非常に良い方法です。

これは、タイムスタンプデータ型を使用する他のテーブルとコードを再利用できることです。

希望すると便利です。