1 回答
TA贡献1862条经验 获得超6个赞
我想我通过使用 ComboBox 模型找到了更好、更优雅的整体解决方案。
首先,数据对象存储在带有字符串键的 HashMap 中,这些键是唯一的,代表每个数据对象的实际名称。
private HashMap<String, DataElement> uniqueStringMap = new HashMap<String, DataElement>();
第二个 ComboBox 模型是通过采用 HashMap 的键集从这些键创建的。
public static DefaultComboBoxModel<String> getModel(DataType dataType)
{
String[] items = (String[]) DataManager.getDataTable(dataType)
.getUniqueStringMap()
.keySet().toArray();
DefaultComboBoxModel<String> model = new DefaultComboBoxModel<String>(items);
return model;
}
然后在 GUI 控制器中设置 ComboBox 模型。
deviceGUI.getDeviceRegistrationPanel().setDeviceTypeCmbModel(CmbModelFactory.getModel(DataType.DEVICE_TYPE));
在实际的 Swing 类中,JComboBox 不知道来自 Model 的实际数据对象,并且设计简单。
private JComboBox<String> cmbDeviceType = new JComboBox<String>();
它的模型是通过控制器通过方法设置的。
public void setDeviceTypeCmbModel(ComboBoxModel<String> model)
{
cmbDeviceType.setModel(model);
}
数据检索是通过获取组合框中选定的项目来完成的。
public String getDeviceType()
{
return (String) cmbDeviceType.getSelectedItem();
}
然后该字符串值用于获取实际的数据对象。
public static DeviceType getDeviceType(String name)
{
return (DeviceType) DataManager.getByUniqueString(DataType.DEVICE_TYPE, name);
}
我希望这可以帮助别人。
添加回答
举报