按字母顺序排列JComboBox元素

问题描述 投票:0回答:1

以下方法来自扩展了DefaultComboBoxModel的类:

public void addGroups() {

    removeAllElements();
    ListModel listModel = ((AutoDataProvider) dataProvider).getXmlJobCustom().getJobList();
    ImageIcon imageIcon;
    GroupModel groupModel;
    for (int i = 0;i < listModel.getSize();i++) {
        XmlJobCustomElem elementAt = (XmlJobCustomElem) listModel.getElementAt(i);
        String group = elementAt.getGroup();

        if(StringUtils.isNotEmpty(group)) {
            if (group.equalsIgnoreCase("WebServices")){
                imageIcon = Res.getIcon(Constants.ICO + "$WS");
            }
            else if (group.equalsIgnoreCase("file transfer") || group.equalsIgnoreCase("transfert de fichiers")){
                imageIcon = Res.getIcon(Constants.ICO + "$FT");
            }
            else if (group.equalsIgnoreCase("json")){
                imageIcon =  Res.getIcon(Constants.ICO + "$JSON");
            }
            else if (group.toLowerCase().contains("aws")){
                imageIcon = Res.getIcon(Constants.ICO + "$AWS");
            } else {
                imageIcon = Res.getDefIcon(Res.getUserLocalPath() + "/" + XmlJobCustom.ICONS_DIR + "/" + XmlJobCustom.ICONS + elementAt.getId(), Constants.ICO + "$Job.Type." + Job.JOB_CUSTOM);
            }
            groupModel = new GroupModel(imageIcon, group);

            if (getIndexOf(groupModel) ==-1 ){
                addElement(groupModel);
            }
        } else if (StringUtils.isEmpty(group)){
            imageIcon = Res.getIcon(Constants.ICO + "$Job.Type" +"."+ 0);
            groupModel = new GroupModel(imageIcon, "Default");
            if (getIndexOf(groupModel) == -1 ){
                addElement(groupModel);
            }
        }
    }

}

说明:我在这里所做的是分析我从包含几个元素的xml文件中获取的信息。这是一个例子:

<Job id="job password" name="job password" group="AWS S3">
    <params>
        <param id="env" name="environment" desc="Python environment" default="default" mandatory="yes"/>
        <param id="passwordid" name="passwd" type="password" desc="passwd" mandatory="yes"/>
    </params>
    <actions>
        <action id="start">
            <params>
                <param prefix="env">env</param>
                <param prefix="--connector">Connector</param>
            </params>
        </action>
    </actions>
</Job>

关注第一行。您看到参数group了吗?这就是搜索所基于的。如果为空,则表示该元素属于default组。如果它不为空,则意味着我应该使用图标将其作为新组添加到JComboBox的组中(JComboBox的每个元素都有一个Icon和一个引用其名称的字符串)。

除了一件小东西,其他所有东西都工作正常。元素没有按字母顺序排序,这是不实际的。

我曾考虑过使用Collections.sort(),但是这里的问题是我没有列表或数组。我有一个DefaultComboBoxModel,它没有方法可以按这种方式对其元素进行排序。

有什么建议吗?

java swing jcombobox
1个回答
0
投票

但是这里的问题是我没有列表或数组。我有一个DefaultComboBoxModel,它没有方法以这种方式对其元素进行排序。

所以你:

  1. 将元素从DefaultComboBoxModel复制到数组
  2. 对数组排序
  3. 使用数组重新创建模型。

  4. 将模型添加到组合框

© www.soinside.com 2019 - 2024. All rights reserved.