gpt4 book ai didi

java - JTable 无法正确排序整数和 double 值

转载 作者:行者123 更新时间:2023-11-30 07:16:36 24 4
gpt4 key购买 nike

我看过几个关于 JTable 排序的问题:

Problems with JTable sorting of integer values

JTable + Sorting specific field

但出于某种原因,我仍然无法做到正确。

我是这样写的:

String allItemsColumns [] = { "#", "Name", "Stock", 
"Price", "Type", "Supplier", "Location", "" };
allItemsTableModel = new DefaultTableModel(null, allItemsColumns);
allItemsTable = new JTable(allItemsTableModel)
{
Class<?>[] types = { Integer.class, String.class, Integer.class,
Double.class, String.class, String.class, String.class, ImageIcon.class };

@Override
public Class<?> getColumnClass(int columnIndex) {
return this.types[columnIndex];
}
};

但我还是明白了

0
10000
20

当我整理库存时。可能这是一个显而易见的问题,但我现在真的很想念它。

我认为我如何添加信息并不重要,因为我(这么认为)告诉它以整数、 double 或字符串读取列

我的排序方式:

allItemsTable.setAutoCreateRowSorter(true);
TableRowSorter<DefaultTableModel> rowSorter =
(TableRowSorter<DefaultTableModel>)allItemsTable.getRowSorter();
rowSorter.setComparator(3, new Comparator<String>() {

@Override
public int compare(String o1, String o2)
{
return Integer.parseInt(o1) - Integer.parseInt(o2);
}

});

我是从我看到的一个问题中摘录的。第 3 列是“股票”,它只是整数,但结果,就像我说的那样:

0
10000
20

最佳答案

总结一下我的各种评论:

  • TableRowSorter 可以并且确实按预期对 Comparable 类型进行排序
  • getColumnClass 是为排序器提供正确排序方法的关键,因为它确定使用哪个默认比较器
    • 如果return 类型是 Comparable,则它是委托(delegate)给它的比较器实现
    • 如果return 类型不是 Comparable,则使用 Collat​​or 实例并为其提供值的字符串表示形式,无论它的实际类型是否是 Comparable

因此,不需要在包含彼此可比较的值的列中使用自定义比较器,只需实现 columnClass 以返回该类型即可。

这是一个演示行为的片段(将其放入您最喜欢的测试设置中,任何框架都可以)。第一列定义为 Integer,它是一个 Comparable,第二列定义为一个数字,它是一个 Comparable,其他的只是 Object。所有实际值都是整数。第一列按数字排序,所有其他列按字符串表示排序

final Class[] classes = new Class[]{Integer.class, Number.class};
DefaultTableModel model = new DefaultTableModel(0, 3) {

@Override
public Class<?> getColumnClass(int columnIndex) {
if (columnIndex < classes.length)
return classes[columnIndex];
return super.getColumnClass(columnIndex);
}

@Override
public String getColumnName(int column) {
return getColumnClass(column).getSimpleName();
}

};
for (int row = 0; row < 15; row++) {
model.addRow(new Object[]{row, row, row});
}
JTable table = new JTable(model);
table.setAutoCreateRowSorter(true);

如果实现 columnClass(顺便说一句:那应该在模型中完成,而不是在 View 中完成!)在具体的上下文中似乎不起作用,那么其他地方应该有一些问题应该被追踪(迟早会再次出现) )

关于java - JTable 无法正确排序整数和 double 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16755509/

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