Приложение hava JavaFX, которое показывает все папки определенного каталога и наблюдает за новыми/удаленными папками и обновляет ListView
.Фильтр JavaFX ListView Элементы файла с использованием FileFilter
Теперь я пытаюсь разрешить пользователю фильтровать/искать папки с помощью TextField
.
Я сделал это раньше, так что это соответствующий код:
@Override
public void initialize(URL location, ResourceBundle resources) {
// configure other stuff
configureListView();
}
private void configureListView() {
searchField.textProperty().addListener((observable, oldVal, newVal) -> {
handleSearchOnType(observable, oldVal, newVal);
});
// more stuff here
}
private void handleSearchOnType(ObservableValue observable, String oldVal, String newVal) {
File folderToSearch = new File(config.getDlRootPath());
ObservableList<File> filteredList = FXCollections.observableArrayList(folderToSearch.listFiles(
pathname -> pathname.isDirectory() && pathname.getName().contains(newVal))); // something seems wrong here?!
if (!searchField.getText().isEmpty()) {
listView.setItems(filteredList);
} else {
// nothing to filter
listView.setItems(FXCollections.observableArrayList(
folderToSearch.listFiles(pathname -> pathname.isDirectory())));
}
}
Это дает мне странные результаты, например .:
Что я здесь отсутствует?
Спасибо заранее!
Edit:
Мой заказ клетка завод
listView.setCellFactory(new Callback<ListView<File>, ListCell<File>>() {
@Override
public ListCell<File> call(ListView<File> list) {
return new ListCell<File>() {
@Override
protected void updateItem(File t, boolean bln) {
super.updateItem(t, bln);
if (t != null) {
setGraphic(new ImageView(new Image("img/folder.png")));
setText(t.getName());
}
}
};
}
});
Вместо проверки '! SearchField .getText(). isEmpty() 'вы можете попробовать'! oldVal.isEmpty() '? – Mustafa
Не исправить, ничего не изменилось. – lenny
Случайное предположение: есть ли у вас обычная фабрика ячеек? Если да, можете ли вы опубликовать его? (Моя догадка, что вы неправильно обрабатываете пустые ячейки ...). (В стороне, вы потенциально получите лучшую производительность, просто сохраняя ссылку на отфильтрованный список и обновляя его предикат, вместо создания нового списка.) –