0

異なるデータ型(int、string、date)のいくつかの列を含むJTableを使用しています。アプリを実行するとデータは正常に表示されますが、列ヘッダーを使用してデータを並べ替えると、Dateオブジェクトを含む列でフリーズします。以下はコードです。列8、9、および10が問題の原因です。日付列がソート可能になるようにするにはどうすればよいですか?

public void updateLogTable() {

    DefaultTableModel model = (DefaultTableModel) logTable.getModel();
    List<LogObject> lstLogObjects = new ArrayList<LogObject>();
    lstLogObjects = LogManager.getLog();
    for (int i = 0; i < lstLogObjects.size(); i++) {
        Object[] temp = new Object[13];

        temp[0] = Integer.parseInt(lstLogObjects .get(i).getLogID());
        temp[1] = lstLogObjects .get(i).getLogType();
        temp[2] = lstLogObjects .get(i).getYear();
        temp[3] = lstLogObjects .get(i).getQuarter();
        temp[4] = lstLogObjects .get(i).getOriginalID();
        temp[5] = lstLogObjects .get(i).getSubject();
        temp[6] = lstLogObjects .get(i).getAction();
        temp[7] = lstLogObjects .get(i).getRequester();
        temp[8] = lstLogObjects .get(i).getADate(); //Returns java.util.Date
        temp[9] = lstLogObjects .get(i).getCDate(); //Returns java.util.Date
        temp[10] = lstLogObjects .get(i).getSDate(); //Returns java.util.Date
        temp[11] = lstLogObjects .get(i).getRemarks();
        temp[12] = lstLogObjects .get(i).getField1();

        model.addRow(temp);

    }
    model.fireTableDataChanged();
 }
4

2 に答える 2

2

TableModelのgetColumnClass(...)メソッドをオーバーライドして、適切なクラスを返しましたか?

次に、テーブルの並べ替えメソッドは、列を並べ替えて、DateオブジェクトでtoString()を呼び出すのではなく、日付として扱います。

さらにサポートが必要な場合は、問題を示すSSCCEを投稿してください。

于 2011-10-06T20:32:03.403 に答える
0

2つの列を表示するよりも些細なことではない場合は、JXTableを使用することをお勧めします。基本的なイントロは、例えばここにあります

他のオプションは、テーブルの要素としてLongを使用し、日付をフォーマットする列レンダラーを使用することです。

 temp[8] = lstLogObjects .get(i).getADate().getTime()

 table.getColumnModel().getColumn(8).setCellRenderer( new DefaultTableCellRenderer(){
    public Component getTableCellRendererComponent(JTable table, Object value,
                                        boolean isSelected, boolean hasFocus,
                                        int row, int column){
        Object value2 = value; 
        if(row>0 && column==8) //put your own condition here
             value2 = new Date((Long)value).toString(); //your own formatting here
        return super.getTableCellRendererComponent(table, value2,
                                          isSelected, hasFocus,
                                          row, column);
     }
  });
 }
于 2011-10-06T21:52:58.157 に答える