Използвам 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)