2011-10-06 37 views
0

我正在使用包含具有不同數據類型(int,string,date)的幾列的JTable。當我運行應用程序時,數據顯示正常,但如果使用列標題對數據進行排序,它會凍結包含Date對象的列。以下是代碼。列8,9,& 10是導致問題的原因。我如何製作日期列可排序?JTable日期列排序凍結

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

什麼類型不'getADate()'返回? –

+0

對不起。我用評論更新了代碼。它返回java.util.Date – Woodsy

+0

@Woodszy什麼返回System.out.println(lstLogObjects .get(i).getADate());類似於週五1月10日00:00:00 GTM 2010 – mKorbel

回答

2

您重寫了TableModel的getColumnClass(...)方法以返回相應的類嗎?

表格排序方法將對列進行排序並將其視爲Date而不是在Date對象上調用toString()。

如果您需要更多幫助,請發佈您的SSCCE來證明問題。

+0

謝謝。我使用Netbeans生成的代碼來定義JTable,因此定製表格變得更加困難。但你的建議奏效了。 – Woodsy

0

我會推薦使用JXTable進行任何比顯示兩列更簡單的操作。基本介紹是例如here

另一種選擇是在表中長時間使用的元素,並使用列渲染器,將格式化日期:

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); 
    } 
    }); 
} 
+0

每次想要渲染單元格時,都不會非常有效地將Long變量連續轉換爲日期。 – camickr