How to get an updated TableModel sort table?

I have a JTable using a setAutoCreateRowSorter(true)RowSorterListener attached as shown below because I need to perform some actions elsewhere in my application on some JTable.

I find that whenever I click the column heading to sort, JTable re-displays the rows in the correct order and the listener is called, but the TableModel that I pull out is always the original model of the pre-sort table.

table.getRowSorter().addRowSorterListener(new RowSorterListener() {
  @Override
  public void sorterChanged(RowSorterEvent rsevent) {
    rsevent.getSource().getModel(); // Nope, original ordering here
    table.getModel(); // Same thing
  }
};

How do I get a new ordering after sorting the rows as it now appears in JTable?

+3
source share
3 answers

The data in the Model table never changes; only the data representation changes.

, , :

table.getValueAt(row, column);

, , .

+4

, table.convertRowIndexToModel(int...), , .

convertRowIndexToModel(), (, , O (1)), . O (n), .

, , .

TableSorter, :

 private Row[] getViewToModel() {

    if (viewToModel == null) {
        int tableModelRowCount = tableModel.getRowCount();

        viewToModel = new Row[tableModelRowCount];

        for (int row = 0; row < tableModelRowCount; row++) {
            viewToModel[row] = new Row(row);
        }

        if (isSorting()) {
            Arrays.sort(viewToModel);
        }
    }

    return viewToModel;
}

private int[] getModelToView() {

    if (modelToView == null) {
        int n = getViewToModel().length;

        modelToView = new int[n];

        for (int i = 0; i < n; i++) {
            modelToView[modelIndex(i)] = i;
        }
    }

    return modelToView;
}
+1

, , , , @LazyCubicleMonkey, , jTable.

DefaultTableModel search_model = (DefaultTableModel) jTable.getModel();
search_model.removeRow(jTable.convertRowIndexToModel(row));
jTable.setModel = (search_model)
0

Source: https://habr.com/ru/post/1795939/


All Articles