繁体   English   中英

JTable排序错误

[英]JTable sorting double wrong

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

这是结果:

图片

实现自己的TableModel将使您可以控制排序。

默认情况下,JTable通过比较从该列的行对象返回的String值来对列进行排序。 因此,如果表包含仅存储整数的列,则默认排序行为是比较字符串值而不是数字值,这是错误的。

如果我们@Override getColumnClass()方法返回表中每列的类类型,那么表预先知道列的确切类型,以实现该列的正确排序行为。

请参阅示例http://www.codejava.net/java-se/swing/6-techniques-for-sorting-jtable-you-should-know的简单教程。

create class table model extends AbstractTableModel和overide方法getColumnClass为你的列返回Double.class

那个例子: http//www.java2s.com/Code/Java/Swing-JFC/CreatingsimpleJTableusingAbstractTableModel.htm

默认行排序仅适用于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);
 YourTable.setAutoCreateRowSorter(true);

它通过点击其中一个来对列进行排序,它将对另一个进行排序。 就如此容易。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM