2017-02-04 5 views
0

私はラベルの配列リストを含むリストビューを検索フィルター(ユーザー名)があります。リストビューフィルタは、最初の項目に取り組んでいます

public void updateList() { 
    UserDAO theDAO = new UserDAO(); 
    userList = theDAO.storeUsers(); 
    listView.setItems(userList); 
    filterField.textProperty().addListener(new ChangeListener() { 
     public void changed(ObservableValue observable, Object oldVal, Object newVal) { 
      search((String) oldVal, (String) newVal); 
     } 
    }); 
} 

public void search(String oldVal, String newVal) { 
    if (oldVal != null && (newVal.length() < oldVal.length())) { 
     listView.setItems(userList); 
    } 
    String value = newVal.toUpperCase(); 
    ObservableList<Label> secondList = FXCollections.observableArrayList(); 

    for (Object entry : listView.getItems()) { 
     boolean match = true; 
     Label entryText = (Label) entry; 

     if (!entryText.getText().toUpperCase().contains(value)) { 
      match = false; 
      break; 
     } 

     if (match) { 
      secondList.add(entryText); 
     } 
    } 
    listView.setItems(secondList); 
} 

今のところ、私のリストビューが含まれています

テストを 3番目

"test"で任意の文字を入力すると、「3番目」と「123」が正しくフィルタリングされ、ListViewにのみ「test」と表示されます。 "t"とタイプすると "3番目"も表示されませんか?

また、フィルターに「123」または「third」と入力すると、すべてのものが除外されます。

どうすればこの問題を解決できますか?

答えて

0

インターネットを掘り下げながら答えを見つけました - 私はbreak文を削除して検索を続けることができました。

2

自分でフィルタリングする代わりにFilteredListを使用する方がよいでしょう。
さらに、ほとんどの場合NodeListViewのアイテムタイプとして使用しないでください(Stringは通常、トリックを行うべきです)。
最後に、ObjectからLabel(または他のクラス)のアイテムをキャストする代わりに、型パラメーターを使用します。これにより、コンパイラはいくつかの型チェックを行い、通常は短いコードにつながります。

ObservableList<String> originalList = ... 
FilteredList<String> filteredList = new FilteredList<>(originalList); 

ListView<String> listView = new ListView<>(filteredList); 

TextField filterField = new TextField(); 
filterField.textProperty().addListener((observable, oldValue, newValue) -> { 
    if (newValue.isEmpty()) { 
     filteredList.setPredicate(null); 
    } else { 
     final String searchString = newValue.toUpperCase(); 
     filteredList.setPredicate(s -> s.toUpperCase().contains(searchString)); 
    } 
}); 
関連する問題