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