TableModel против ColumnModel: кому принадлежит значение столбца? - PullRequest
17 голосов
/ 12 сентября 2010

В чем разница между JTable.getModel().getColumnName() и JTable.getColumnModel().getColumn(index).getHeaderValue()?Кажется, что эти двое не делятся данными.Я предполагаю, что TableModel.getColumnName() указывает текстовое представление столбца, в то время как TableColumn.getHeaderValue() и TableColumn.getHeaderRenderer() определяют, как выглядит столбец (это не обязательно должен быть простой текст).

Что гарантирует, чтодва синхронизированы?Что произойдет, если два конфликта?

1 Ответ

30 голосов
/ 12 сентября 2010

Если JTable создан с TableModel , но без TableColumnModel JTable создаст TableColumnModel используя createDefaultColumnModel () и установите autoCreateColumnsFromModel в значение true.Когда это свойство имеет значение true, JTable будет заполнять TableColumnModel значениями из TableModel .

Никто не может гарантировать, что двасинхронизированы.Например, JTable.getColumnName () вернет имя столбца TableModel независимо от того, что на самом деле TableColumnModel отображает на экране.

Еще одна интересная вещь, которую я заметил, заключается в том, что TableModel ограничен столбцами String, тогда как TableColumnModel позволяет передавать любой объект в TableCellRenderer .Javadoc говорит , что значения ограничены строками, но на самом деле это зависит от реализации.Ничто не мешает вам написать реализацию, которая использует значение JComponent .

В итоге : TableColumnModel является конечным владельцем значений столбцов. TableColumnModel только запрашивает TableModel только для значений, если у него его еще нет.Например, в случае, когда вы передаете столбец в JTable.addColumn () без указания значения заголовка.

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