JComboBox的标签在幕后应用了不同的值/数据类型?

时间:2018-03-17 18:30:56

标签: java swing jcombobox

如何让JComboBox标签可供最终用户查看,并在幕后应用不同的值/数据类型?

我为我的工作场所制作了一个基本的计算器。它根据长度,材料厚度和芯尺寸计算成品卷尺寸和直径。如果我使用所有文本字段并坚持使用int / double数据类型,那么它很容易并且运行良好。然而,对于不知道材料厚度的销售人员等,我想切换到这些条目的组合框。

例如,我希望第一个组合框项目说“热转印永久”,但我希望在幕后输入.005的厚度值,我的第二个项目是“Thermal Direct Permanent”但是我想要.006进入我的数学。将添加更多材料和厚度。

1 个答案:

答案 0 :(得分:0)

JComboBox可以显示任何对象的列表。它显示的文本是(通常)由所述对象的toString()方法返回的文本。您需要做的就是创建自己的数据对象,其中包含标签和值。

像这样:

class CoBoItem {
    private final String display;
    private final float value;

    // constructor to create your data objects
    CoBoItem(String display, float value) {
        this.display = display;
        this.value = value;
    }
    // methods to get the values
    String getDisplay() {
        return display;
    }

    float getValue() {
        return value;
    }
    // this will be displayed in the JComboBox
    @Override
    public String toString() {
        return display;
    }
}

然后用这个数据类初始化你的JComboBox作为类型参数,就像这样。

JComboBox<CoBoItem> cb = new JComboBox<>();
cb.addItem(new CoBoItem("Thermal transfer Permanent", 0.005f));
cb.addItem(new CoBoItem("Thermal Direct Permanent", 0.006f));

您可以使用

访问所选项目
cb.getSelectedItem();

它将返回一个Object,因此您必须将其强制转换为CoBoItem。