0

MVC デザイン パターンを使用してプログラムを作成しようとしています。私のモデルでは、文字列のセットを作成しました。文字列は、約 45 のロケールのセットです。

私の見解では、JComboBox を作成しています。45 の一意のロケールのセットを順番に使用したいので、LinkedHashSet を使用しています。

ロケールを JComboBox に渡そうとするときに問題が発生しました。よくわからないことがいくつかあります。

編集: 私が知りたい主なことは、セットを JComboBox に入れる方法です。以下は、これを書いているときに私が考えたいくつかの他の質問です。必要に応じて、お気軽に回答してください。

  1. セットを使用する必要がありますか?それは正しいコレクションですか?
  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())));

(つまり、順序付けられたセットをベクターの「コレクションから追加」コンストラクターに渡して新しいベクターを作成し、それを使用して を作成しますComboBoxModel)

更新:Javadocを見ると、ステップをスキップできるようです:

m_selectLocale = new JComboBox(new Vector<String>(getLocales()));

これにより、新しい ComboBoxModel が暗黙的に作成されます。

FWIW、選択肢の挿入順序を保持したい場合は、OrderedSet (LinkedHashSet など) が良い選択だと思います。たとえば、ComboBox に選択肢のアルファベット順のリストが必要な場合は、TreeSet のように、セット メンバーの自然順序付けを使用する OrderedSet を使用することができます。

于 2013-12-25T20:38:01.613 に答える