我正在尝试使用MVC设计模式创建一个程序。在我的模型中,我创建了一组String。弦是大约45个地点的集合。
在我看来,我正在创建一个JComboBox。我想按照它们的顺序使用45个唯一的区域设置,所以我使用的是一个LinkedHashSet。
我很难将语言环境传递给JComboBox,有些事情我不确定。
编辑:我想知道的主要事情是如何将我的套装放到我的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;
}发布于 2013-12-25 20:38:01
我相信你可以这样做:
m_selectLocale = new JComboBox(new DefaultComboBoxModel(new Vector<String>(getLocales())));(换句话说,通过将有序的集合传递给向量的'add from a collection‘构造函数,然后使用它来创建ComboBoxModel,从而创建一个新的向量)
更新:查看Javadoc,看起来您可以跳过一个步骤:
m_selectLocale = new JComboBox(new Vector<String>(getLocales()));这,我相信,含蓄地为你创造了一个新的ComboBoxModel。
FWIW,如果您想要保留选择的插入顺序,我认为OrderedSet (如LinkedHashSet)是一个很好的选择。如果您想要在您的ComboBox中有一个按字母顺序排列的选项列表,您可能需要使用一个使用集合成员自然排序的OrderedSet,比如TreeSet。
发布于 2013-12-25 20:46:39
如果我使用的是一套,这是正确的集合。
这将取决于你希望实现什么。Set将保证唯一性。根据有限的资料,我认为这是一个不错的选择。
如果我使用的是LinkedHashSet,它是正确的实现吗?
同样,这将取决于你想要实现什么。任何链接结构都非常适合序列化访问(从开始到结束),但对于随机访问(跳入列表和任意点)则不是很好。
这可能会使它成为与组合框一起使用的错误选择。
我正确地使用了组合框吗?
考虑到代码不会编译的事实,很可能不会。JComboBox采用ComboBoxModel、数组或Vector,而不是任何类型的Set。
就我个人而言,我会创建我自己的组合框模型,得到Set的支持。这样,您就不需要将Set转换成其他类型的结构,并且可以节省(少量)内存。
有什么建议吗?
阅读教程
我对数据结构知之甚少,有什么好的资源吗?
根据最后一个问题
https://stackoverflow.com/questions/20776480
复制相似问题