我正在尝试使用MVC设计模式创建程序。在我的模型中,我创建了一组字符串。字符串只是大约45个区域设置。
在我看来,我正在创建一个JComboBox。我想按照它们所在的顺序使用45个唯一语言环境的Set,所以我使用的是LinkedHashSet。
我在尝试将区域设置传递给JComboBox时遇到了麻烦,而且有一些我不确定的事情。
编辑:我想知道的主要内容是如何让我的Set进入我的JComboBox。以下是我写这篇文章时想到的其他一些问题。如果您愿意,请随时回答!这是我正在使用的代码:
查看
private JComboBox<String> m_selectLocale = new JComboBox(getLocales());
LinkedHashSet<String> getLocales(){
System.out.println("running");
Set<String> localesSet = m_model.getLocales();
LinkedHashSet<String> locales = new LinkedHashSet<>(localesSet);
return locales;
}
模型
private static Set<String> localeSet = new LinkedHashSet<String>(Arrays.asList("All", "ar-ae", "ar-sa", "cs-cz", "da-dk", "de-at", "de-ch", "de-de", "el-gr", "en-ae", "en-au"));
public Set<String>getLocales(){
return localeSet;
}
答案 0 :(得分:2)
我相信你可以这样做:
m_selectLocale = new JComboBox(new DefaultComboBoxModel(new Vector<String>(getLocales())));
(换句话说,通过将您的有序集传递给Vector的'从集合添加'构造函数创建一个新的Vector,然后使用它来创建ComboBoxModel
)
更新:看看Javadoc,看起来你可以跳过一步:
m_selectLocale = new JComboBox(new Vector<String>(getLocales()));
我相信,隐含地为您创建一个新的ComboBoxModel。
FWIW,我认为如果你想保留选择的插入顺序,OrderedSet(比如LinkedHashSet)是一个很好的选择。如果你想在ComboBox中有一个按字母顺序排列的选项列表,你可能想要使用一个使用set members自然排序的OrderedSet,比如TreeSet。
答案 1 :(得分:2)
我是否应该使用Set,它是否是正确的集合。
这取决于你希望实现的目标。 Set
将保证唯一性。根据有限的信息,我认为这不是一个糟糕的选择。
我应该使用LinkedHashSet,它是否是正确的实现。
同样,这将取决于您想要实现的目标。任何链接结构都非常适合于序列化访问(从开始到结束),但对于随机访问(跳入列表和任意点)不太好
这可能会成为使用组合框
的错误选择我是否正确使用了组合框?
鉴于代码无法编译,可能不会。 JComboBox
需要ComboBoxModel
,数组或Vector
,而不是任何类型的Set
。
就个人而言,我会创建我自己的组合框模型,由Set
支持。这样您就不需要将Set
转换为其他类型的结构,并且可以节省(少量)内存。
有任何建议等吗?
阅读教程
我对数据结构知之甚少,对它有什么好的资源?
根据最后一个问题