簡體   English   中英

JTable AutoCreateRowSorter將數字排序為字符串

[英]JTable AutoCreateRowSorter sorting Numbers As Strings

我有一個JTable:

JTable table = new JTable();
String[] colNames = {"c1"};
DefaultTableModel model = new DefaultTableModel();

Integer[] x = new Integer[10];
int[] xi = {0,1,2,3,4,5,6,7,8,9};
for (int i=0; i<10; i++){
    x[i]=new Integer(xi[i]);
}model.addColumn("c1");

table.setModel(model);
table.setEnabled(false);
table.setAutoCreateRowSorter(true);
JScrollPane scrollpane = new JScrollPane(table);
contentPane.add(scrollpane);

現在當我加載它並單擊列標題時,行排序就好像它們是字符串:

0,10 ......(按長度排序)

我怎樣才能改變它,以便按數字順序排列?

我怎樣才能改變它,以便按數字順序排列?

覆蓋TableModel的getColumnClass()方法以返回Integer.class ,Integer Comparator將用於對數據進行排序,而不是字符串比較器。

這是因為RowSorter調用TableModel.getColumnClass(int index)來獲取與index位置的列關聯的Class ,並使用其Comparator進行排序。

DefaultTableModelAbstractTableModel擴展,不覆蓋getColumnClass(int columnIndex)方法:

public Class<?> getColumnClass(int columnIndex) {
    return Object.class;
}

如您所見,它總是返回Object.class 要對列進行正確排序,需要覆蓋getColumnClass方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM