[英]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.