Изменить структуру TableModel

поэтому сценарий таков, что у меня есть JTable с несколькими JComboBox в качестве ячеек. При выборе элемента JComboBox необходимо изменить структуру модели таблицы. У меня также есть «выходная таблица» ниже, которая прослушивает выбор JComboBox и соответственно повторно проверяет, из-за этого мне нужно сохранить модель таблицы запросов такой же, чтобы она могла повторно использовать прослушиватель. Как я могу изменить структуру табличной модели?

DefaultTableModel QueryTableModel = new DefaultTableModel(dropDownUserSelection, resultsListHeadings );     
queryTable.setModel(QueryTableModel);

JComboBox box = new JComboBox(boxModel);      
queryTable.getColumnModel().getColumn(i).setCellEditor(new DefaultCellEditor(box));

Прошу прощения, если задаю вопрос, который уже задавался где-то еще, но я порылся и не смог найти то, что искал.

Спасибо


person J Smith    schedule 13.02.2013    source источник
comment
Это немного неясно. По структуре, я предполагаю, вы хотите добавить/удалить столбцы?   -  person MadProgrammer    schedule 14.02.2013
comment
Привет, спасибо за ваш ответ... Да, это правильно.   -  person J Smith    schedule 14.02.2013
comment
Измените свой вопрос, включив в него sscce, который показывает вашу комбинацию, для пример, и ваш звонок fireTableStructureChanged().   -  person trashgod    schedule 14.02.2013


Ответы (1)


TableModel несет ответственность за уведомление родительской таблицы (или всех, кто слушает) об изменениях в модели.

Доступны следующие общие события: изменение данных, обновление ячейки, вставка/удаление строки и изменение структуры.

«Структура изменена» сообщает родительской таблице, что структура модели таблицы (количество столбцов и/или имена столбцов и/или типы изменились) и она должна полностью обновиться.

Есть несколько способов добиться этого. Вы можете изменить существующую табличную модель соответствующим образом и запустить событие "структура изменена" или создать новую табличную модель и применить ее к JTable, в зависимости от ваших потребностей.

person MadProgrammer    schedule 13.02.2013
comment
+1 setModel(), показанный здесь, также запускает необходимое событие. - person trashgod; 14.02.2013
comment
@Eng.Fouad 40 сегодня, 40 сегодня... Я чувствую себя таким старым ;) - person MadProgrammer; 14.02.2013
comment
Если я выполню setModel(), то модель изменится, и слушатель больше не будет слушать, потому что это другая модель. Так что единственный вариант изменить структуру огня? - person J Smith; 14.02.2013
comment
@JSmith является единственным вариантом запуска измененной структуры нет, используйте API DefaultTableModel для обновления (например, setDataVector), и модель будет запускаться соответствующим образом. В любом случае, ваша установка пахнет подозрительно - лучше всего показать SSCCE, как уже было предложено. И пока вы это делаете: пожалуйста, изучите соглашения об именах Java и придерживайтесь их :-) - person kleopatra; 14.02.2013
comment
Привет, ваше предложение setDataVector() сработало. В следующий раз я буду более полезен, включив SSCCE и придерживаясь соглашений об именах. Спасибо! - person J Smith; 14.02.2013