以下方法来自扩展了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
,它没有方法可以按这种方式对其元素进行排序。
有什么建议吗?
但是这里的问题是我没有列表或数组。我有一个DefaultComboBoxModel,它没有方法以这种方式对其元素进行排序。
所以你:
使用数组重新创建模型。
将模型添加到组合框