gpt4 book ai didi

Java TableRowSorter 未正确排序表行

转载 作者:行者123 更新时间:2023-12-02 10:40:46 29 4
gpt4 key购买 nike

我正在使用 TableRowSorter 对 JTable 中的 DefaultTableModel 进行排序。我已经使用了代码

TableRowSorter<DefaultTableModel> sorter = new TableRowSorter<DefaultTableModel>(itemTableModel);

itemsTable.setRowSorter(sorter);

当我单击表格列标题时,它会对其进行排序,但效果不佳。假设我有“价格”列,我单击标题对其进行排序,它对某些行进行了正确排序,但时不时会添加不应该存在的行。例如:

PRICE: (Ascending)

0.59
1.29
25.9
200.99 (not supposed to be here)
32.99
45
8.95 (also not supposed to fit there)

所以基本上这里发生的事情是它没有正确地整理价格。尽管它应该按升序排序,但这是不正确的。我该如何解决这个问题?如果有人有答案并且可以解释的话那就太好了。

最佳答案

列根据列的类进行排序,该类由模型的 getColumnClass method 定义.

如果您不重写模型中的 getColumnClass 方法,则每列的类型都是 Object.class,这意味着其内容按 string forms 排序。 .

您将需要编写一个重写 getColumnClass 方法的 TableModel 类。

通常,这是通过直接扩展 AbstractTableModel 来完成的:

public class ItemModel
extends AbstractTableModel {
private static final long serialVersionUID = 1;

private final List<Item> items = new ArrayList<>();

public void add(Item item) {
items.add(item);

int newRow = items.size() - 1;
fireTableRowsInserted(newRow, newRow);
}

@Override
public int getRowCount() {
return items.size();
}

@Override
public int getColumnCount() {
return 2;
}

@Override
public Object getValueAt(int row,
int column) {

Item item = items.get(row);

switch (column) {
case 0:
return item.getName();
case 1:
return item.getPrice();
default:
throw new IllegalArgumentException(
"Invalid column: " + column);
}
}

@Override
public String getColumnName() {
switch (column) {
case 0:
return "Name";
case 1:
return "Price";
default:
throw new IllegalArgumentException(
"Invalid column: " + column);
}
}

@Override
public Class<?> getColumnClass(int column) {
switch (column) {
case 0:
return String.class;
case 1:
// Returning a class which implements/inherits Comprable
// will cause TableRowSorter to sort
// by comparing values directly.
return Double.class;
default:
throw new IllegalArgumentException(
"Invalid column: " + column);
}
}
}

关于Java TableRowSorter 未正确排序表行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52933457/

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