0

我正在尝试使用 MVC 设计模式创建一个程序。在我的模型中,我创建了一组字符串。字符串只是大约 45 个语言环境的集合。

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

我在尝试将语言环境传递给 JComboBox 时遇到了麻烦,并且有些事情我不确定。

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

  1. 我应该使用 Set,它是正确的集合吗?
  2. 我应该使用 LinkedHashSet,它是正确的实现吗?
  3. 我是否正确使用了组合框?
  4. 有什么建议等吗?
  5. 我对数据结构不太了解,有什么好的资源吗?

这是我已经在使用的代码:

看法

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

2 回答 2

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 中有一个按字母顺序排列的选项列表,你可能想使用一个使用集合成员自然排序的 OrderedSet,比如 TreeSet。

于 2013-12-25T20:38:01.613 回答
2

我应该使用 Set,它是正确的集合吗?

这将取决于您希望实现的目标。Set将保证唯一性。基于有限的信息,我认为这不是一个糟糕的选择。

我应该使用 LinkedHashSet,它是正确的实现吗?

同样,这将取决于您想要实现的目标。任何链接结构都非常适合序列化访问(从头到尾移动),但不太适合随机访问(跳入列表和任意点)

这可能使其成为与组合框一起使用的错误选择

我是否正确使用了组合框?

鉴于代码无法编译,可能不会。 JComboBox接受一个ComboBoxModel, 数组或Vector, 不是任何类型的Set.

就个人而言,我会创建我自己的组合框模型,由Set. 这样您就不需要将其转换Set为其他类型的结构,并且可以节省(少量)内存。

有什么建议等吗?

阅读教程

我对数据结构不太了解,有什么好的资源吗?

根据最后一个问题

于 2013-12-25T20:46:39.647 回答