1 回答

TA貢獻1862條經驗 獲得超6個贊
我想我通過使用 ComboBox 模型找到了更好、更優(yōu)雅的整體解決方案。
首先,數據對象存儲在帶有字符串鍵的 HashMap 中,這些鍵是唯一的,代表每個數據對象的實際名稱。
private HashMap<String, DataElement> uniqueStringMap = new HashMap<String, DataElement>();
第二個 ComboBox 模型是通過采用 HashMap 的鍵集從這些鍵創(chuàng)建的。
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);
}
我希望這可以幫助別人。
添加回答
舉報