java - JTable 服务器端排序

标签 java swing

我有一个客户端/服务器应用程序,我的 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;
  }
}

关于java - JTable 服务器端排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10331156/

相关文章:

java - 使用带有 JCheckBox 的 itemListener 来显示/隐藏 JTextField

java - 在主窗口中切换 JPanel

java - jtable 内的动态 jcombobox 项目

java - 如何停止 SwingWorker?

java - 为自定义 JTable TableModel 创建 addRows() 方法

Java Scanner if/else 和 while 语句

java - 如何将纳秒级的正常运行时间转换为可读的日期时间格式

java - 如何在 Java 中的 JPanel 边框中写入文本?

java - 使用 Java+Selenium WebDriver 验证页面上的错误消息的强大解决方案

java - Java 中的多个命令提示符/控制台?