JTable, заполненный данными базы данных, не обновляется при изменении порядка столбцов

У меня есть JTable, заполненный данными таблицы моей базы данных (поэтому я использовал ResultSetTableModel) и использую TableRowSorter для сортировки строк, когда я щелкаю в одном столбце JTable. Данные отображаются в jTable без проблем;

Но когда я сортирую JTable по некоторой таблице столбцов (например, сортируя ее по значению первичного ключа) и редактирую какую-то ячейку из отсортированной jTable, измененное значение — это старая ячейка, которая была в этой позиции до упорядочения столбца .

Например: предположим, у меня есть таблица с двумя столбцами — имя и возраст. В моей таблице есть следующие данные:

c 1
b 2
a 3

когда я заказываю i по имени в JTable, это становится таким

a 3
b 2
c 1

если я редактирую значение "1", то после редактирования таблица становится такой

a 1
b 2
c 1

Кажется, что позиции не обновляются в JTable, а значения редактируются с учетом их исходных позиций.


person marionmaiden    schedule 12.04.2010    source источник


Ответы (1)


Во-первых, обратите внимание, что данные фактически содержатся в модели, а jtable — это просто представление. Обычно по умолчанию строки и столбцы jtable соответствуют строкам и столбцам таблицы. Когда вы сортируете, это сопоставление между строкой jtable, col может не оставаться прежним, поэтому, когда вы хотите отредактировать, скажем, ячейку (rowVal, colVal), сделайте

table.setValueAt(object,table.convertRowIndexToModel(rowVal),convertColumnIndexToModel(colVal))

это должно сохранить сопоставление после сортировки. Прочтите раздел «Сортировка и фильтрация» здесь: http://java.sun.com/docs/books/tutorial/uiswing/components/table.html

person missionE46    schedule 28.04.2010