在jcombobox中使用linkedhashset?

时间:2013-12-25 20:23:56

标签: java swing jcombobox linkedhashset

我正在尝试使用MVC设计模式创建程序。在我的模型中,我创建了一组字符串。字符串只是大约45个区域设置。

在我看来,我正在创建一个JComboBox。我想按照它们所在的顺序使用45个唯一语言环境的Set,所以我使用的是LinkedHashSet。

我在尝试将区域设置传递给JComboBox时遇到了麻烦,而且有一些我不确定的事情。

编辑:我想知道的主要内容是如何让我的Set进入我的JComboBox。以下是我写这篇文章时想到的其他一些问题。如果您愿意,请随时回答!

  1. 我应该使用Set,是不是正确的集合。
  2. 我应该使用LinkedHashSet,这是正确的实现。
  3. 我是否正确使用了组合框?
  4. 有任何建议等吗?
  5. 我对数据结构知之甚少,对它有什么好的资源吗?
  6. 这是我正在使用的代码:

    查看

    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;
    }
    

2 个答案:

答案 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转换为其他类型的结构,并且可以节省(少量)内存。

  

有任何建议等吗?

阅读教程

  

我对数据结构知之甚少,对它有什么好的资源?

根据最后一个问题