Пользовательский конструктор TableCellEditor вызывается только один раз?

У меня есть JTable. Одному столбцу в JTable назначается расширенный TableCellEditor, который отображает расширенный JComboBox.

Существует фиксированный список из 100 объектов String, который заполняет поля со списком.

Соревнование:

  • Спроектировать JComboBoxes так, чтобы любой выбор был уникальным по сравнению с другими ящиками? То есть, если «A» выбрано из поля со списком в первой строке, оно автоматически удаляется из списка каждого другого поля со списком.
  • Когда в таблицу добавляется новая комната, содержащееся в ней поле со списком должно автоматически заполняться первым доступным элементом списка.

Проблема: мои поля со списком работают прекрасно. Я могу выбирать предметы по желанию. Я даже добился некоторого прогресса в удалении уже использованных предметов из списков. Но я не могу понять, как правильно автозаполнять.

Я очень смущен, потому что кажется, что мой конструктор со списком вызывается только один раз при создании таблицы, а не один раз для каждой строки.

Так ли это? Вызывается ли конструктор для TableCellEditor только один раз? Если да, то как изменить поведение каждого поля со списком по мере его появления?

Спасибо за вашу помощь!

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


person Robbie    schedule 05.06.2015    source источник
comment
Нам не нужна вся ваша кодовая база. Если бы вы могли сделать короткий пример, иллюстрирующий проблему, с как можно меньшим количеством классов и методов, это было бы большой помощью.   -  person markspace    schedule 05.06.2015
comment
Is the constructor for a TableCellEditor only called once ever? - конструктор для любого объекта вызывается только один раз при создании объекта. my combobox constructor is only called once when the table is created, not once for each row. — смысл использования редакторов и рендереров в том, что классы совместно используются таблицей, чтобы минимизировать количество создаваемых объектов.   -  person camickr    schedule 06.06.2015


Ответы (2)


Когда в таблицу добавляется новая комната, содержащееся в ней поле со списком должно автоматически заполняться первым доступным элементом списка.

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

person camickr    schedule 05.06.2015

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

person Robbie    schedule 05.06.2015