1 回答

TA貢獻(xiàn)1862條經(jīng)驗(yàn) 獲得超6個(gè)贊
我想我通過使用 ComboBox 模型找到了更好、更優(yōu)雅的整體解決方案。
首先,數(shù)據(jù)對(duì)象存儲(chǔ)在帶有字符串鍵的 HashMap 中,這些鍵是唯一的,代表每個(gè)數(shù)據(jù)對(duì)象的實(shí)際名稱。
private HashMap<String, DataElement> uniqueStringMap = new HashMap<String, DataElement>();
第二個(gè) 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 控制器中設(shè)置 ComboBox 模型。
deviceGUI.getDeviceRegistrationPanel().setDeviceTypeCmbModel(CmbModelFactory.getModel(DataType.DEVICE_TYPE));
在實(shí)際的 Swing 類中,JComboBox 不知道來自 Model 的實(shí)際數(shù)據(jù)對(duì)象,并且設(shè)計(jì)簡(jiǎn)單。
private JComboBox<String> cmbDeviceType = new JComboBox<String>();
它的模型是通過控制器通過方法設(shè)置的。
public void setDeviceTypeCmbModel(ComboBoxModel<String> model)
{
cmbDeviceType.setModel(model);
}
數(shù)據(jù)檢索是通過獲取組合框中選定的項(xiàng)目來完成的。
public String getDeviceType()
{
return (String) cmbDeviceType.getSelectedItem();
}
然后該字符串值用于獲取實(shí)際的數(shù)據(jù)對(duì)象。
public static DeviceType getDeviceType(String name)
{
return (DeviceType) DataManager.getByUniqueString(DataType.DEVICE_TYPE, name);
}
我希望這可以幫助別人。
添加回答
舉報(bào)