JTable排序双重错误



我试图在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);

它对列进行排序点击其中一列,它会对另一列进行排序。就这么简单。