0

SearchFieldDemoは私にとってはうまく機能しますが、問題が 1 つあります。メニューから KeywordFilterList に新しい国を追加し、その新しい項目がソートされたリストの一番下にある場合、ユーザーには何も表示されず、新しいアイテムが追加されたかどうか。

解決策は、KeywordFilterList を新しいアイテムにスクロールさせることですが、その方法がわかりません。私はもう試した:

void addElementToList(Country country)
{       
    _countryList.addElement(country);
    _keywordFilterField.updateList();

    int index = _countryList.getIndex(country);
    System.err.println("XXX index: " + index);
    _keywordFilterField.setSelectedIndex(index);
}   

しかし、これは何の効果もありません。印刷されたインデックスは正しく、KeywordFilterList はスクロールしますが、正しい場所にはなりません。

アイデアはありますか?アレックス

4

1 に答える 1

0

_keywordFilterField.setKeyword("");サンプル アプリでは、新しいアイテムをリストに追加する前に最初に行う行に気付いたかもしれません。これは、新しいアイテムがリストに表示されることを保証するためです。そうしないと、フィルタを適用すると、リストに新しいアイテムが表示されない場合があります。

したがって、コードでは、この点を処理していないように見えます。その結果、得られるインデックスint index = _countryList.getIndex(country);は、現在のキーワード リストによってフィルター処理された可視のインデックスと同じではない場合があります。ところで、表示可能なリストでインデックスを見つけるには、ReadableListwhich で取得できる を使用できます_keywordFilterField.getResultList()

したがって、ワークフローは次のようになります。

  1. キーワードを_keywordFilterField.setKeyword("");次のようにリセット - フィルタリングが適用されていないため、表示されるリストに新しいアイテムが含まれている必要があります。
  2. 基礎となるコレクションに新しいアイテムを追加する -_countryList.addElement(country);
  3. _keywordFilterField.updateList();ListField を更新するために呼び出します。
  4. を呼び出して取得したコレクションを使用して、スクロール先のインデックスを見つけます。_keywordFilterField.getResultList()
  5. で新しいアイテムを選択します_keywordFilterField.setSelectedIndex(index);
于 2011-04-08T18:35:06.503 に答える