1

クライアント/サーバー アプリがあり、JTables がページ分割されており、データの範囲のみが表示されます。今、私はソートを処理したいと思いますが、サーバー側です。デフォルトの並べ替えの実装をカスタマイズするにはどうすればよいですか?

4

1 に答える 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 に答える