クライアント/サーバー アプリがあり、JTables がページ分割されており、データの範囲のみが表示されます。今、私はソートを処理したいと思いますが、サーバー側です。デフォルトの並べ替えの実装をカスタマイズするにはどうすればよいですか?
1 に答える
1
うまくいく解決策を見つけましたが、それが最善ではないことは確かです! :)
...
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-26T21:00:35.430 に答える