У меня возникают трудности при создании JComboBox, который будет использоваться для фильтрации и выбора определенного пользовательского объекта данных, который извлекается из внутренней структуры данных, и значение, показанное в JComboBox, будет просто значением одного поля в этом пользовательскомобъект данных или даже поле поля (то есть сам пользовательский объект) включающего пользовательского объекта данных. Например, у меня есть форма регистрации модели устройства.
https://drive.google.com/open?id=1q-_ii_V7SWDBFvUJGw0cd2BEWP3BnM0H
Модель имеет имя, спецификацию, тип устройства и производителя, которые его определяют. Это фактический класс Model, который я использую:
public class Models
{
private DeviceTypes deviceType;
private Manufacturers manufacturer;
private String name;
//getters and setters
}
Это еще одна часть HashMap, которая содержит все Модели с их идентификатором.
public Map<Integer,Models> modelsTable = new HashMap<Integer, Models>();
Я хочу иметь возможность добавитьи удалить элементы из JComboBox и выбрать фактические данные, объединенные с элементами JComboBox, для создания новых моделей с этими объектами. Какой стандартный способ сделать это? Я создал средство визуализации ComboBox:
public class DeviceTypeRenderer extends BasicComboBoxRenderer
{
private static final long serialVersionUID = 3442865560696889757L;
public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus)
{
if (value instanceof DeviceTypes)
{
value = ((DeviceTypes)value).getName();
}
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
return this;
}
}
public class ManufacturersRenderer extends BasicComboBoxRenderer
{
private static final long serialVersionUID = 3723328665061573656L;
public Component getListCellRendererComponent(JList<?> list, Object value,int index, boolean isSelected, boolean cellHasFocus)
{
if (value instanceof Manufacturers)
{
value = ((Manufacturers)value).getName();
}
super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
return this;
}
}
И затем я просто добавляю или удаляю их как объекты данных.
DeviceTypes deviceType = new DeviceTypes(name,description);
comboBoxDeviceType.addItem(deviceType);
И JComboBox отображает deviceType.getName();
Чтобудет лучшим способом сделать обратное. Чтобы получить актуальный класс данных формы выбора элемента JComboBox? Я, вероятно, сделал все это неправильно и использую много плохой практики. Если вы видите это, пожалуйста, сообщите мне, чтобы исправить себя, и я был бы признателен, если бы вы могли показать мне, как реализовать это правильно. Заранее спасибо!