簡體   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