/ / Как да получа актуализирана таблична таблица след сортиране? - Java, люлка, сортиране, jtable

Как мога да получа актуализиран пост-сортиране TableModel? - java, люлка, сортиране, jtable

Използвам JTable setAutoCreateRowSorter(true) и RowSorterListener приложен, по-долу, защото аз трябва да изпълнява някои операции на друго място в моята молба на един вид на JTable.

Намирам, че всеки път, когато кликнете върху заглавието на колонасортиране, JTable redisplays на редовете в правилния ред и слушателя се нарича, но TableModel Аз извадя винаги е оригиналната предварително сортиране таблица модел.

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

Как да получа новото подреждане по ред на редовете, както е показано в JTable?

Отговори:

4 за отговор № 1

Данните в TableModel никога не се променят, само изгледът на данните се променя.

Ако искате данните от модела в реда, в който е показан в таблицата, тогава просто използвайте:

table.getValueAt(row, column);

С други думи, трябва да прегледате всички редове и колони, за да получите данните в текущо гледаната поръчка.


1 за отговор № 2

Мисля, че можете да използвате table.convertRowIndexToModel (int ...), но мисля, че има по-добро решение.

Ако дефинирате собствения си convertRowIndexToModel (), който е бърз преглед (може би чрез карта, O (1)), това решение би трябвало да е достатъчно.

Просто преминете през цикъла на редовете, конвертирайте всеки един и направете търсенето като използвате получения индекс.

Ето 2 метода в 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;
}

0 за отговор № 3

Здравейте Знам, че това е наистина късно отговор, но аз се опитах кода, използван за коментар на @ LazyCubicleMonkey и това е работа тук е моят код за получаване на ред, когато jTable е сортирана.

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