Почему метод toString не получит выбранный элемент в JComboBox?

69
4

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

while(rs.next())
{
departmentId = rs.getInt(1);
departmentTypeList = rs.getString(2);

ArrayList<DepartmentList> listDepartment = new ArrayList<DepartmentList>();

listDepartment.add(new DepartmentList(departmentId,departmentTypeList));
StringBuilder builder = new StringBuilder();

for(DepartmentList s : listDepartment)
{
builder.append(s);
}
cbDepartmentType.addItem(builder.toString());
}

private class DepartmentList
{
private int id;
private String department;

private DepartmentList(int id,String department)
{
this.id = id;
this.department = department;
}

private int getId()
{
return id;
}

@Override
public String toString() //Converting to String the (departmentId,departmentTypeList)
{
return department;
}
}

Я добавил слушателя на моем JComboBox, чтобы прослушать, какой элемент выбран. Я уже преобразовал свой класс в Object, но когда я нажимаю JComboBox, он дает мне исключение java.lang.String Любые способы решения этой проблемы?

if(e.getSource() == cbDepartmentType)
{
DepartmentList item = (DepartmentList) cbDepartmentType.getSelectedItem();
System.out.println("id "+(item.getId()));
}

Трассировки стека:

Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: java.lang.String cannot be cast to position.AddPosition$DepartmentList
at position.AddPosition$ItemHandler.actionPerformed(AddPosition.java:295)
at javax.swing.JComboBox.fireActionEvent(JComboBox.java:1258)
at javax.swing.JComboBox.setSelectedItem(JComboBox.java:586)
at javax.swing.JComboBox.setSelectedIndex(JComboBox.java:622)

Обновить:

while(rs.next())
{
departmentId = rs.getInt(1);
departmentTypeList = rs.getString(2);

ArrayList<DepartmentList> listDepartment = new ArrayList<DepartmentList>();
listDepartment.add(new DepartmentList(departmentId,departmentTypeList));
cbDepartmentType.addItem(listDepartment.toString());
}

спросил(а) 2016-11-16T14:47:00+03:00 3 года назад
1
Решение
55

Вы добавляете String в Combobox

cbDepartmentType.addItem(builder.toString());

И вы пытаетесь отбросить выбранный элемент в список DepartementList

DepartmentList item = (DepartmentList) cbDepartmentType.getSelectedItem();

Но вы получаете строку. Так что это похоже на попытку запустить.

DepartmentList item = (DepartmentList) "A string";

Вы можете добавить DepartmentList к comboxbox непосредственно.

cbDepartmentType.addItem(departement);

Для печати текста в компоненте будет использоваться реализация toString() из списка DepartementList.

При этом выбранный элемент будет экземпляром списка участников.

Вот официальное руководство по использованию Combo Boxes

РЕДАКТИРОВАТЬ:

Ваш код должен выглядеть так:

while(rs.next())
{
departmentId = rs.getInt(1);
departmentTypeList = rs.getString(2);

DepartmentList dep = new DepartmentList(departmentId,departmentTypeList); //Create a department
cbDepartmentType.addItem(dep ); //insert into the combo
}

В исходном коде вы использовали List для хранения экземпляра, затем восстановите этот экземпляр, чтобы проанализировать его в StringBuilder, а затем вставьте это представление (String) в поле со списком.

Моя логика

Отдел → Combobox

ваш

List> Departemnt> StringBuilder> Combobox

Попытайтесь понять цикл while, который вы имели, вы увидите, что это вовсе не логика.

ответил(а) 2016-11-16T15:05:00+03:00 3 года назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема