【问题标题】:How to display information in a JComboBox, but choose different information for backend operation如何在 JComboBox 中显示信息,但后端操作选择不同的信息
【发布时间】:2019-09-19 14:59:40
【问题描述】:

我有一个与不同操作相关的代码列表。 我想显示易于阅读的信息供用户选择,但是当用户选择他们想要的内容时,当他们单击按钮提交时,后端操作与代码列表相关。 示例:

 Displayed          | Backend                        
--------------------|------------------------------------------
 Hardware Inventory | "{00000000-0000-0000-0000-000000000001}" 
 Software Inventory | "{00000000-0000-0000-0000-000000000002}" 

【问题讨论】:

  • 你能添加最小的例子吗?
  • 所以,我正在做的是想从控制台运行 wmic,但是以 GUI 格式。

标签: java swing jcombobox


【解决方案1】:

最佳答案取决于这些标签-代码对是否变化很大。为了灵活性:

public class FooOperation {
    private final String label;
    private final String internalCode;
    public FooOperation(String label, String internalCode) {
        this.label = label;
        this.internalCode = internalCode;
    }
    public String toString() { return label; } // human-readable, displayed in CB
    public String getCode() { return internalCode; } // ugly but true
}

然后,您可以在应用程序启动时从文件中加载它们,并给出您以某种方式加载的FooOperation[],您可以通过显示它

JComboBox options = new JComboBox(availableOperations);

选项会根据它们的toString()显示,但是一旦选择,你可以很容易地确定它们的内部代码:

FooOption[] selected = options.getSelectedItems();
if (selected.length == 1) {
   System.err.println("you have selected " + selected[0].getCode());
}

如果您不需要在启动时从文件或类路径资源加载它们的灵活性,您也可以使用enum(只需使用public enum FooOperation 并在枚举类中初始化所有可能的操作)。这更简单(无文件),但更难扩展(您必须修改代码并重新编译以更改可用选项)

【讨论】:

  • 是的。我不需要灵活性。它们将是静态的,永远不会改变。
【解决方案2】:

使用在 toString() 方法中返回的不那么可呈现的值和易于阅读的值创建您自己的类。然后将您的值添加到组合框中。 使用 getSelectedItem() 检索值。

【讨论】:

    猜你喜欢
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    • 2018-11-19
    • 2016-10-12
    相关资源
    最近更新 更多