- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个包含 3 列的 JTable
。每列都有自己的格式,表格如下所示:
问题是(如您所见)排序不正确 (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/
我有一个包含 3 列的 JTable。每列都有自己的格式,表格如下所示: 问题是(如您所见)排序不正确 (setAutoCreateRowSorter)。 我尝试为 col3 定义我自己的对象类型,实
我正在尝试对 JTable 的第二列中的整数进行排序。我用过table.setAutoCreateRowSorter(true);但它是按字符串排序的。我正在尝试编写一些代码来解决这个问题,但我无法让
在开发小型任务管理器时,我注意到列的排序不正确。为了解决我的程序的问题,我创建了一个最小版本,但它仍然无法正确排序唯一列。 import java.awt.BorderLayout; import j
为了填充 JTable,我使用了 AbstractTableModel。我还提供了使用 setAutoCreateRowSorter 进行排序的机会。所有这些操作都插入到一个定时器进程中,该进程在 1
我有一个 JTable,其中设置了 table.setAutoCreateRowSorter(true);。我的主要目标是无论任何列排序顺序如何,都有一行始终位于顶部。我做的第一件事是修改单元格数据类
我写了一个默认的表格渲染如下: public class CustTableRenderer extends DefaultTableCellRenderer{ @Override p
tableMalzeme.setModel(DbUtils.resultSetToTableModel(resultSet)); tableMalzeme.setAuto
我正在通过 Java 查询 MySQL 数据库,从结果集中提取数据并将其放入 DefaultTableModel 中,该模型放入 JTable 中,然后放入 JScrollPane 中进行显示。 在
我是一名优秀的程序员,十分优秀!