我正在尝试在JTable中对一列双打进行排序。 我设法对它进行排序,但似乎分拣机不考虑减去。
这是表格代码:
table = new JTable(new DefaultTableModel(new Object[]{"קניה", "מכירה", "שם"}, 0));
table.setCellSelectionEnabled(true);
table.setAutoCreateRowSorter(true);
table.getTableHeader().setReorderingAllowed(false);
table.setAutoResizeMode(JTable.AUTO_RESIZE_LAST_COLUMN);
table.getColumnModel().getColumn(0).setPreferredWidth(80);
DefaultTableCellRenderer renderer = (DefaultTableCellRenderer)table.getDefaultRenderer(Object.class);
renderer.setHorizontalAlignment(JLabel.RIGHT);
jPanel.add(new JScrollPane(table), BorderLayout.CENTER);
frmYadAd.getContentPane().add(jPanel);
这是结果:
答案 0 :(得分:1)
实现自己的TableModel可以控制排序。
默认情况下,JTable通过比较从该列的行对象返回的String值来对列进行排序。因此,如果表包含仅存储整数的列,则默认排序行为是比较字符串值而不是数字值,这是错误的。
如果我们 @Override getColumnClass() 方法返回表中每列的类类型,然后表先知道列的确切类型实现该列的正确排序行为。
请参阅示例http://www.codejava.net/java-se/swing/6-techniques-for-sorting-jtable-you-should-know的简单教程。
答案 1 :(得分:1)
为您的列创建类表模型扩展AbstractTableModel
和覆盖方法getColumnClass
返回Double.class
。
那个例子: http://www.java2s.com/Code/Java/Swing-JFC/CreatingsimpleJTableusingAbstractTableModel.htm
答案 2 :(得分:1)
默认行排序仅适用于String。如果你使用另一个对象,这些对象将被转移到String然后比较,例如Double,它将被转移到Double.toString()。因此,要比较其他对象而不是字符串,最好写一个比较器并将其设置为表,在某些关于sort double column的代码下面:
TableRowSorter<TableModel> sorter = new TableRowSorter<TableModel> (table.getModel());
int double_Column = 1;
sorter.setComparator(double_Column, new Comparator<Double>(){
public int compare(Double o1, Double o2){
return o1.compareTo(o2);
}
});
table.setRowSorter(sorter);
答案 3 :(得分:0)
YourTable.setAutoCreateRowSorter(true);
它通过点击其中一个对列进行排序,然后对另一个进行排序。就这么简单。