我试图在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);
结果如下:
图片创建类表模型扩展AbstractTableModel
并覆盖getColumnClass
返回Double.class
的方法
这个例子:http://www.java2s.com/Code/Java/Swing-JFC/CreatingsimpleJTableusingAbstractTableModel.htm
默认的行排序只适用于String。如果你使用另一个对象,这些对象将被转移到String然后进行比较,例如Double,它将被转移到Double. tostring()。因此,要比较其他对象而不是字符串,最好编写一个比较器并将其设置为表,下面是关于双列排序的一些代码:
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);
实现你自己的TableModel可以让你控制排序。
默认情况下,JTable通过比较从该列的行对象返回的String值对该列进行排序。因此,如果表包含一个只存储整数的列,那么默认排序行为是比较String值而不是数值,这是错误的。如果我们@Override方法getColumnClass()方法返回表中每个列的类类型,那么表就提前知道该列的确切类型,从而为该列实现正确的排序行为。 查看一个简单的示例教程http://www.codejava.net/java-se/swing/6-techniques-for-sorting-jtable-you-should-know.
YourTable.setAutoCreateRowSorter(true);
它对列进行排序点击其中一列,它会对另一列进行排序。就这么简单。