搜索时,ControlxFX TableView筛选器返回java.lang.NullPointerException

时间:2019-01-04 21:58:07

标签: javafx tableview filtering controlsfx

我正在使用TextField组件设置JavaFX TableView过滤器,并尝试实现jar ControlxFX过滤器,在其中可以过滤Excel表格中的列。在代码末尾添加方法TableFilter.forTableView(tableView)并在TextField中键入字母时,它会过滤tablewview,但会返回java.lang.NullPointerException,但搜索结果的延迟很大。

删除方法TableFilter.forTableView(tableView)将“解决”问题,但是即使Tablewview显示的内容少于该值,列中的“过滤器”仍将保持相同的值。

/MainController.php

.....

    @FXML
    private TextField searchPacientTextField;

......


 @FXML

   // On Key Released

    private void searchPacients(KeyEvent event) {

        FilteredList<Pacients> filterpacients = new FilteredList<>(listp, e -> true);
        searchPacientTextField.setOnKeyReleased(e -> {

            searchPacientTextField.textProperty().addListener((observable, oldValue, newValue) -> {

                filterpacients .setPredicate((Predicate<? super Pacients>) pacient -> {

                    if (newValue == null || newValue.isEmpty()) {
                        return true;
                    }
                    String lowerCaseFilter = newValue.toLowerCase();
                    if (String.valueOf(pacient.getID()).contains(lowerCaseFilter)) {
                        return true;
                    } else if (pacient.getNumeP().toLowerCase().contains(lowerCaseFilter)) {
                        return true;
                    } else if (pacient.getMedic().toLowerCase().contains(lowerCaseFilter)) {
                        return true;
                    } else if (pacient.getTehnician().toLowerCase().contains(lowerCaseFilter)) {
                        return true;
                    }

                    return false;

                });
              });

            SortedList<Pacients> sortedData = new SortedList<>(filterpacients );
            sortedData.comparatorProperty().bind(tableView.comparatorProperty());
            tableView.setItems(sortedData);

            //The ControlsFX Table Filter
        TableFilter.forTableView(tableView).apply();

        });

    }

删除行TableFilter.forTableView(tableView).apply();仍会对列表进行排序,但不会返回任何java.lang.NullPointerException

与线

  1. 搜索名称

  2. 返回结果,右键单击“ Nume Pacient”列将返回相同的结果

  3. 将返回很多异常

该行已删除

  1. 搜索名称

  2. 返回结果,右键单击“ Nume Pacient”列将不会返回相同结果,并将保留旧列表

不会返回任何异常,并且搜索不会像上面那样延迟

0 个答案:

没有答案