第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

鏈接數(shù)據(jù)和 ComboBox 項(xiàng)目的最佳方式

鏈接數(shù)據(jù)和 ComboBox 項(xiàng)目的最佳方式

婷婷同學(xué)_ 2023-09-13 17:33:06
我在制作 JComboBox 時(shí)遇到困難,該 JComboBox 將用于過濾和選擇從內(nèi)部數(shù)據(jù)結(jié)構(gòu)中提取的特定自定義數(shù)據(jù)對(duì)象,并且 JComboBox 中顯示的值只是該自定義數(shù)據(jù)對(duì)象中一個(gè)字段的值,甚至是封閉的自定義數(shù)據(jù)對(duì)象的字段的字段(即自定義對(duì)象本身)。例如,我有設(shè)備型號(hào)注冊(cè)表。https://drive.google.com/open?id=1q-_ii_V7SWDBFvUJGw0cd2BEWP3BnM0H模型具有定義它的名稱、規(guī)格、設(shè)備類型和制造商。這是我使用的實(shí)際模型類:public class Models{    private DeviceTypes deviceType;    private Manufacturers manufacturer;    private String name;    //getters and setters}這是包含所有模型及其 ID 的 HashMap 的進(jìn)一步部分。public Map<Integer,Models> modelsTable = new HashMap<Integer, Models>();我希望能夠從 JComboBox 添加和刪除項(xiàng)目,并選擇 JComboBox 項(xiàng)目代表的實(shí)際數(shù)據(jù),以使用這些對(duì)象創(chuàng)建新模型。執(zhí)行此操作的標(biāo)準(zhǔn)方法是什么?我創(chuàng)建了一個(gè)組合框渲染器: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;    }}然后我只需將它們作為數(shù)據(jù)對(duì)象添加或刪除。DeviceTypes deviceType = new DeviceTypes(name,description);comboBoxDeviceType.addItem(deviceType);并且 JComboBox 顯示deviceType.getName();做相反的事情最好的方法是什么。要從 JComboBox 項(xiàng)目選擇中獲取實(shí)際的數(shù)據(jù)類?我可能以錯(cuò)誤的方式做了這一切,并且使用了很多不好的做法。如果您看到這一點(diǎn),請(qǐng)通知我糾正,如果您能向我展示如何正確實(shí)施這一點(diǎn),我將不勝感激。先感謝您!
查看完整描述

1 回答

?
阿波羅的戰(zhàn)車

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);

}

我希望這可以幫助別人。


查看完整回答
反對(duì) 回復(fù) 2023-09-13
  • 1 回答
  • 0 關(guān)注
  • 120 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)