一段时间后过滤不起作用

时间:2016-04-19 16:05:07

标签: search javafx filtering freeze

我在我的应用this example中使用,让用户搜索/过滤表格。

当您运行该应用程序时,它完美无缺。

问题是当我离开程序打开,最小化,一段时间后(10-15分钟)我尝试再次使用它。然后,当搜索/过滤器根本不起作用时。

以下是代码:

@FXML
private void initialize() {
    // 0. Initialize the columns.
    firstNameColumn.setCellValueFactory(cellData -> cellData.getValue().firstNameProperty());
    lastNameColumn.setCellValueFactory(cellData -> cellData.getValue().lastNameProperty());

    // 1. Wrap the ObservableList in a FilteredList (initially display all data).
    FilteredList<Person> filteredData = new FilteredList<>(masterData, p -> true);

    // 2. Set the filter Predicate whenever the filter changes.
    filterField.textProperty().addListener((observable, oldValue, newValue) -> {
        filteredData.setPredicate(person -> {
            // If filter text is empty, display all persons.
            if (newValue == null || newValue.isEmpty()) {
                return true;
            }

            // Compare first name and last name of every person with filter text.
            String lowerCaseFilter = newValue.toLowerCase();

            if (person.getFirstName().toLowerCase().contains(lowerCaseFilter)) {
                return true; // Filter matches first name.
            } else if (person.getLastName().toLowerCase().contains(lowerCaseFilter)) {
                return true; // Filter matches last name.
            }
            return false; // Does not match.
        });
    });

    // 3. Wrap the FilteredList in a SortedList. 
    SortedList<Person> sortedData = new SortedList<>(filteredData);

    // 4. Bind the SortedList comparator to the TableView comparator.
    sortedData.comparatorProperty().bind(personTable.comparatorProperty());

    // 5. Add sorted (and filtered) data to the table.
    personTable.setItems(sortedData);
       }                   
    }

1 个答案:

答案 0 :(得分:0)

我尝试了代码,它对我有用。

但是,第2步必须是最后一步,因为 filteredData.setPredicate 仅在第二次用户输入后生效。

如果有人只是添加一个字母,那么过滤就不会发生。