JTable排序错误

时间:2016-08-30 11:32:37

标签: java sorting 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);   

这是结果:

Image

4 个答案:

答案 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);

它通过点击其中一个对列进行排序,然后对另一个进行排序。就这么简单。