Проблема с добавлением JComboBox в JTable в Java?

#java #swing #jtable #jcombobox

#java #swing #jtable #jcombobox

Вопрос:

Я добавил combobox в JTable, добавляющий код выглядит следующим образом:

 Vector<String> header = new Vector<String>();
Vector data = new Vector();
String[] h = new String[]{"Music", "Movie", "Sport"};
header.add("Code");
header.add("Name");
header.add("Salary");
 header.add("Hobby");
loadData(); // Add some data to the table
DefaultTableModel tblModel;
tblModel = (DefaultTableModel) this.tblEmp.getModel();
tblModel.setDataVector(data, header);

// Adding combobox to the last column
TableColumn hobbyColumn = tblEmp.getColumnModel().getColumn(3);
hobbyColumn.setCellEditor(new MyComboBoxEditor(h));
  

Все работало нормально, пока я динамически не добавил новую строку в таблицу, используя код:

 Vector v = new Vector();
v.add("E333");
v.add("Peter");
v.add(343);
v.add(""); // This last colum is the combobox so I put it as ""

data.add(v);
tblEmp.updateUI();
  

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

Комментарии:

1. Я предполагаю, что мы не сможем выяснить вашу проблему на основе не показанного кода, и вы не сможете опубликовать весь свой код. Лучше всего создать небольшую компилируемую и работоспособную программу, которую мы можем тестировать и модифицировать и которая демонстрирует вашу проблему, sscce

2. Как минимум, вы должны показать нам код MyComboBoxEditor, который, вероятно, является причиной проблемы. Кроме того, вы не должны напрямую добавлять новую строку в свой data вектор, а скорее использовать tblModel.addRow() , который автоматически запустит обновление пользовательского интерфейса. Кстати, updateUI() предназначена не для обновления таблицы, а для изменения ее LAF, следовательно, вы НИКОГДА не должны ее использовать..

3. Мы оказали вам всю возможную помощь на основе вашего вопроса. Пока вы не опубликуете свой SSCCE, мы не сможем предоставить какую-либо дополнительную помощь.

Ответ №1:

Никогда не используйте метод updateUI(). Прочитайте API, чтобы увидеть, что на самом деле делает этот метод. Это не имеет ничего общего с изменением данных в модели.

JTable уже поддерживает редактор полей со списком, поэтому нет необходимости создавать пользовательский редактор Mycombobox. Ознакомьтесь с JTable API и перейдите по ссылке на руководство Swing «Как использовать таблицы», чтобы получить рабочий пример использования поля со списком в качестве редактора.