gpt4 book ai didi

java - JXTable 排序不正确

转载 作者:行者123 更新时间:2023-11-30 07:05:12 25 4
gpt4 key购买 nike

我正在使用 JXTable 来显示、过滤和排序一些数据。但是,我在排序时遇到了一些意想不到的行为。如您所见,值并未按预期升序,而是按字符串的排序方式排序。

为了处理评论,我确信此列在代码的正确部分(即 Float.valueOf() block )中得到解析。我通过调试知道这一点。此外,我通过单击 jxtable 的标题对列进行排序。我不是以编程方式进行的。

Incorrect Sort Order

为了清楚起见,我将它们添加为 Floats:

class FantasyProTableModel extends DefaultTableModel
{
void loadData() throws BiffException, IOException
{
Workbook workbook = Workbook.getWorkbook(new File("Input.xls"));
Sheet sheet = workbook.getSheet(0);

int numCols = sheet.getColumns();
for(int col=0;col<numCols;col++)
{
addColumn(sheet.getCell(col,0).getContents());
}
for(int rownum=1;rownum<sheet.getRows();rownum++)
{
Object[] row = new Object[numCols];
for(int col=0;col<numCols;col++)
{
try
{
row[col] = Float.valueOf(sheet.getCell(col,rownum).getContents());
//parseFloat() doesn't work either
}
catch(NumberFormatException e)
{
row[col] = sheet.getCell(col,rownum).getContents();
}
}
addRow(row);
}

workbook.close();
}
}

我该怎么做才能让它按值按正确的升序排序?

最佳答案

好吧,经过大量挖掘,我发现了两件事,第一,JXTable 有它自己的“行排序器”,它包装了默认的一和二,因为 DefaultTableModel 默认情况下从 getColumnClass 返回 Object.class,这些东西被搞砸了(SwingX 的排序器试图利用 Comparator 接口(interface),但如果对象类不可比较,则默认使用 toString)

你有两个选择......

你可以...

DefaultTableModel 实现 getColumnClass 并返回一个正确的类引用...

DefaultTableModel model = new DefaultTableModel(0, 1) {
@Override
public Class<?> getColumnClass(int columnIndex) {
return Float.class;
}
};

或者你可以...

提供您自己的 JXTable 行排序器实现比较器...

((TableSortController)table.getRowSorter()).setComparator(0, new Comparator<Float>() {
@Override
public int compare(Float o1, Float o2) {
return o1.compareTo(o2);
}
});

关于java - JXTable 排序不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26966063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com