2011-11-02 76 views
1

在Java Swing應用程序(內置Netbeans 6.9)中,我有一個包含21列的JTable。其中約14列由雙值組成。前6列是日期和字符串。在第七列,雙打開始。當應用程序運行時,表格中的每一列都將通過單擊表格的標題行進行正確排序 - 第7列除外。該表認爲此數據是字符串類型,並將其排序爲字符串。Java JTable排序不適用於只有一列

如果我將數據移動到另一列,那麼這個新列現在排序爲一個字符串。所以這個問題不是特定的專欄,而是關於這個數據的東西。

但是,這些數據被定義爲雙,純粹而簡單:

double x; 
public double getX() { 
    return x; 
} 

那些正確排序的定義相同的方式雙打的列。

我甚至試圖將這個有問題的數據轉換爲double(即使它已經是double)並且沒有任何區別。

我也嘗試設置單元格渲染器的列不會排序爲一個數字(即使其他列不需要此步驟)。

table.getColumnModel().getColumn(6).setCellRenderer(table.getDefaultRenderer(Double.class)); 

還有什麼可能導致這列數字排序爲字符串?

+0

貌似問題7299289.的重複請檢查http://stackoverflow.com/questions/7299289/sorting-double-values-in-jtable-solved – carawan

+0

,我不認爲這個問題是一樣的問題7299289.但是,我確實通過盲運解決了這個問題,解決方案涉及到在DefaultTableModel的子類中實現getColumnClass。我會回答我的問題併發布我的解決方案。 – MountainX

+0

另請參閱[如何使用表格 - 概念:編輯器和渲染器](http://download.oracle.com/javase/tutorial/uiswing/components/table.html#editrender)。 – trashgod

回答

3

我必須在擴展DefaultTableModel的類中實現getColumnClass。

public class MyTableModel extends DefaultTableModel { 

    public MyTableModel(Object[][] data, Object[] columnNames) { 
     super(data, columnNames); 
    } 
      @Override 
    public Class getColumnClass(int c) { 
     return getValueAt(0, c).getClass(); 
    } 
} 
+0

所有情況下最舒適的方式+1 – mKorbel