Связь между JTable, TableModel и TableData - PullRequest
5 голосов
/ 18 февраля 2009

Какая связь между JTable, TableModel и TableData? Если я просто изменю TableData, это также изменит отображение данных на компоненте JTable, или мне придется вызвать какой-то метод для синхронизации этих двух. Я смотрел на это , но он явно не говорит и не показывает мне отношения с точки зрения обновлений

Ответы [ 3 ]

5 голосов
/ 18 февраля 2009

Когда вы изменяете значение в данных TableModel, вы должны запустить это событие. например. изменяя значение одной ячейки, вы звоните fireTableCellUpdated(row, col);.

Посмотрите на это более конкретно.

2 голосов
/ 18 февраля 2009

При установке TableModel в JTable, таблица добавляет наблюдателя ( TableModelListener ), чтобы получать информацию об изменениях в модели.

При изменении данных в модели ожидается, что модель уведомит зарегистрированных слушателей, запустив TableModelEvent . Само событие может содержать дополнительную информацию о гранулярности изменения (независимо от того, значительно ли изменена структура или изменены только некоторые данные ячейки), чтобы JTable мог выполнить обновление оптимизированного представления.

2 голосов
/ 18 февраля 2009

Я предполагаю, что вы используете фразу «TableData», чтобы просто обозначать данные, отображаемые в JTable. Чтобы ответить на ваш вопрос, видите ли вы автоматическое обновление или нет, зависит от вашей TableModel и от того, как он взаимодействует с вашими данными.

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

В зависимости от того, как организована ваша модель, данные под ней могут изменяться без ведома TableModel. В этом случае, если у вас есть прямой переход от TableModel к данным, значения на экране изменятся при естественном перекрашивании (изменение размера экрана, перемещение мыши и т. Д.), Но если вы хотите вызвать событие, вы должны получить TableModel для уведомления JTable через вышеупомянутые события. С точки зрения взаимосвязи TableModel знает о данных таблицы, но данные таблицы (как правило) не имеют представления о модели. TableModel может или не может прослушивать данные для изменений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...