1
我有一個客戶端/服務器應用程序和我的JTables分頁,它只顯示一個範圍的數據。現在我想處理排序,但服務器端。我如何自定義默認排序實現?JTable服務器端排序
我有一個客戶端/服務器應用程序和我的JTables分頁,它只顯示一個範圍的數據。現在我想處理排序,但服務器端。我如何自定義默認排序實現?JTable服務器端排序
我發現了一個可行的解決方案,但我相信它不是最好的! :)
...
final MyTableModel myModel = new MyTableModel();
final MySorter mySorter = new MySorter(myModel);
mySorter.addRowSorterListener(new RowSorterListener() {
@Override
public void sorterChanged(RowSorterEvent e) {
// server side sorting
sortDataByColumn(mySorter.getColumnToSort());
}
});
JTable table = new JTable();
table.setModel(myModel);
table.setRowSorter(mySorter);
...
class MySorter extends TableRowSorter<TableModel> {
private String columnToSort;
public MySorter(AbstractTableModel model) {
super(model);
}
@Override
public void sort() {
// do nothing! because server side sorting
}
@Override
protected void fireSortOrderChanged() {
// build a string like [+-]column_identifier.
// where + is for ASC and - for DESC ordering
final SortKey k = getSortKeys().get(0);
final String colName = getModel().getTableColumnModel()
.getColumn(k.getColumn()).getIdentifier().toString();
if (colName != null && !colName.isEmpty()) {
columnToSort = (k.getSortOrder() == SortOrder.ASCENDING ? '+' : '-') + colName;
} else {
columnToSort = null;
}
super.fireSortOrderChanged();
}
public String getColumnToSort() {
return columnToSort;
}
}
*「現在我想處理排序,但服務器端」*爲什麼?這似乎是網絡和服務器上不必要的負擔。順便說一句 - 你試圖在這裏實現什麼功能,你可以向最終用戶解釋它?我懷疑,無論那個特徵是什麼,你都會以錯誤的方式去做。 – 2012-04-26 10:11:15
例如。在db中,我有1.000.000條記錄,我無法在客戶端應用程序的jtable中顯示所有這些記錄,但我只會顯示前100個記錄。如果用戶單擊一個列標題來排序記錄,客戶端應用程序需要按新的排序標準獲取其他100條記錄。 – devmao 2012-04-26 11:02:36
爲什麼不在查詢中添加一個ORDER BY'子句? – trashgod 2012-04-26 11:41:11