gpt4 book ai didi

java - 重写 getColumnClass 方法后,jTable 仍然错误地对数字进行排序

转载 作者:行者123 更新时间:2023-12-02 05:37:52 35 4
gpt4 key购买 nike

我试图让我的 jTable 对数字进行排序,但它仍然不起作用。我不确定我做错了什么,但一切似乎都很好。

我的代码: 公共(public)静态javax.swing.JTable jTable1;

public void fillMain() {

jTable1 = new javax.swing.JTable();

//finalcolumns is a List<String> of all my column names
//types is List<Class> of classes of my columns


DefaultTableModel tm = new DefaultTableModel(new Object[0][], new String[] {"testcolumn1", "testcolumn2", "testcolumn3"}) {
@Override
public Class<?> getColumnClass(int col) {
System.out.println("Class: " types.get(col).toString());
//here it really returns the right column class (Integer.class)
return types.get(col);
}

@Override
public int getColumnCount() {
return finalcolumns.size();
}

@Override
public String getColumnName(int col) {
return finalcolumns.get(col);
}
};

jTable1.setModel(tm);
jTable1.setAutoCreateRowSorter(true);

}

正如我在代码中标记的那样,我正在重写 DefaultTableModel 方法,并且重写按预期工作,我重写的所有方法都会返回正确的值。

所以它就像:TableModel 说:“这一列是 Integer 类,它包含整数对象,所以我像字符串一样对它进行排序”。

为什么会发生这种情况?

最佳答案

您正在正确地解决问题,但我怀疑您初始化表的方式或未显示的 FinalColumns 或类型列表可能存在问题。

下面显示了实现 getColumnClass 的通用方法。这是基于 Java Tutorials 中提出的建议实现,但添加了一项检查以防止出现 0 行的表模型:

@Override
public Class<?> getColumnClass(int col) {

Class retVal = Object.class;

if(getRowCount() > 0)
retVal = getValueAt(0, col).getClass();

return retVal;
}

如果您用下面的代码片段替换您的 tm TableModel 声明/初始化,它应该提供您寻求的行为。您应该只需要更改它填充表数据和列标题的方式。

Object[][] data = new Object[5][3];

data[0][0] = "word";
data[1][0] = "jive";
data[2][0] = "stuff";
data[3][0] = "word2";
data[4][0] = "abc";

data[0][1] = new Integer(410);
data[1][1] = new Integer(45);
data[2][1] = new Integer(456456);
data[3][1] = new Integer(4);
data[4][1] = new Integer(4);

String[] columnNames = new String[] {"testcolumn1", "testcolumn2"};

DefaultTableModel tm2 = new DefaultTableModel(data, columnNames) {

@Override
public Class<?> getColumnClass(int col) {

Class retVal = Object.class;

if(getRowCount() > 0)
retVal = getValueAt(0, col).getClass();

return retVal;
}

};

希望这有帮助。

关于java - 重写 getColumnClass 方法后,jTable 仍然错误地对数字进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24808575/

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