gpt4 book ai didi

java - setAutoCreateRowSorter 对象

转载 作者:行者123 更新时间:2023-11-29 05:41:28 26 4
gpt4 key购买 nike

我有一个包含 3 列的 JTable。每列都有自己的格式,表格如下所示:

enter image description here

问题是(如您所见)排序不正确 (setAutoCreateRowSorter)。

我尝试为 col3 定义我自己的对象类型,实现了 Comparable,并且还为该对象提供了一个 toString() 方法。但这似乎无法帮助我正确排序。

知道我做错了什么吗?

public class SortJTable {

public static void main(String[] args) {
String[] columns = getTableColumns();
Object[][] tableData = getTableValues();
TableModel model = new DefaultTableModel(tableData, columns) {

@Override
public Class getColumnClass(int col) {
if (col == 2) // third column is a TablePercentValue
return TablePercentValue.class;
else
return String.class;
}
};

JTable table = new JTable(model);
table.setAutoCreateRowSorter(true); // Make it possible to column-sort

JFrame frame = new JFrame();
frame.add(new JScrollPane(table));
frame.pack();
frame.setVisible(true);
}

private static String[] getTableColumns(){
String[] columns = new String[3];
columns[0] = "col1";
columns[1] = "col2";
columns[2] = "col3";
return columns;
}

private static Object[][] getTableValues(){
Object[][] tableData = new Object[100][3];
for(int i=0; i<tableData.length; i++){
for(int j=0; j<tableData[0].length; j++){
String value;
if(j==2)
value = i+","+j+"%";
else if(j == 1)
value = i+":"+j;
else
value = i+""+j;
tableData[i][j] = value;
}
}
return tableData;
}
}

class TablePercentValue implements Comparable<TablePercentValue> {

private String value;
private double compValue;

public TablePercentValue(String value){
this.value = value;
// Remove "%"-sign and convert to double value
compValue = Double.parseDouble(value.replace("%", ""));
}

public String toString(){
return value;
}

@Override
public int compareTo(TablePercentValue o) {
return compValue>o.compValue ? 1 : -1;
}
}

最佳答案

您重写的 getColumnClass 在说谎:第二列不是 TablePercentValue 类型,它仍然是一个 String。就您的示例而言,这可以在您填充数据的位置修复:

for(int j=0; j<tableData[0].length; j++){
if(j==2)
tableData[i][j] = new TablePercentValue(i+","+j+"%");
else if(j == 1)
tableData[i][j] = i+":"+j;
else
tableData[i][j] = i+""+j;
tableData[i][j] = value;
}

TablePercentValue 构造函数中,我必须添加一个额外的 replace(",", ".")

compValue = Double.parseDouble(value.replace("%", "").replace(",", "."));

但这可能只是一个本地化问题,对您来说运行良好。

关于java - setAutoCreateRowSorter 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17407467/

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