Модель JTable и Table, когда использовать, когда?

У меня есть некоторое представление о разнице между этими двумя. Но я не понимаю, когда и когда использовать. Я просто знаю это,

  • Чтобы отобразить JTable, создайте JTable и установите для него соответствующую модель таблицы.
  • В любое время, если мы хотим изменить данные в этой таблице, изменить данные в модели, тогда изменения будут отражены в представлении.

Мы можем получить значения таблицы как из представления, так и из модели. Вот где я запутался. Если произошло какое-либо событие, подобное (выбор строки), то откуда мне нужно получить значение? Это взгляд или модель? Что лучше всего использовать, учитывая сортировку и фильтрацию JTable?


person Sanjeev    schedule 05.09.2012    source источник


Ответы (2)


Вы можете получить значение либо из модели таблицы, либо из самого экземпляра JTable; конечный результат такой же. JTable getValueAt и связанные методы просто вызывают один и тот же метод для объекта внутренней модели таблицы.

Исходный код JTable # getValueAt (int, int):

public Object getValueAt(int row, int column) {
    return getModel().getValueAt(convertRowIndexToModel(row),
                                 convertColumnIndexToModel(column));
}
person FThompson    schedule 05.09.2012

Мое практическое правило состоит в том, что я получаю данные из элемента, в котором произошло изменение (обычно это источник события). В случае вашего примера изменений в выборе строки, я извлекаю данные из таблицы, поскольку выбор связан с просмотром.

Это сделано для того, чтобы я не использовал правильную строку / столбец. В примере выбора строки вполне возможно, что данные сортируются на стороне просмотра (в JTable), в то время как сторона модели не изменяется (TableModel). В этом случае, если я получаю сообщение о том, что выбрана строка 5, это означает строку 5 в JTable, а не в TableModel.

Это можно увидеть в реализации getValueAt, опубликованной в ответе @Vulcan. Он запрашивает значение у модели, но сначала преобразует индексы строки и столбца из «координат представления» в «координаты модели».

person Robin    schedule 05.09.2012