获取未筛选的JavaFXTableView列

获取未筛选的JavaFXTableView列,java,javafx,filter,tableview,Java,Javafx,Filter,Tableview,我有一个TableView,其中的行根据您在搜索所有列的文本字段中键入的内容进行过滤,使用以下代码: FilteredList<CommandeFX> filteredData = new FilteredList<>(data, p -> true); // 2. Set the filter Predicate whenever the filter changes. filterField.textProperty().addListener

我有一个TableView,其中的行根据您在搜索所有列的文本字段中键入的内容进行过滤,使用以下代码:

FilteredList<CommandeFX> filteredData = new FilteredList<>(data, p -> true);

    // 2. Set the filter Predicate whenever the filter changes.
    filterField.textProperty().addListener((observable, oldValue, newValue) -> {
        filteredData.setPredicate(commande -> {
            // 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 (String.valueOf(commande.getCodeCommande()).toLowerCase().contains(lowerCaseFilter)) {
                return true;
                 // Filter matches first name.

            } else if (String.valueOf(commande.getCMD()).toLowerCase().contains(lowerCaseFilter)) {
                return true; // Filter matches last name.
            }
            else if (String.valueOf(commande.getClient()).toLowerCase().contains(lowerCaseFilter)) {                                  
                return true; // Filter matches last name.
            }
            else if (String.valueOf(commande.getFournisseur()).toLowerCase().contains(lowerCaseFilter)) {
                return true; // Filter matches last name.
            }
            else if (String.valueOf(commande.getQuantite()).toLowerCase().contains(lowerCaseFilter)) {
                return true; // Filter matches last name.
            }
            else if (String.valueOf(commande.getPrixCommande()).toLowerCase().contains(lowerCaseFilter)) {
                return true; // Filter matches last name.
            }
            else if (String.valueOf(commande.getSommeProperty()).toLowerCase().contains(lowerCaseFilter)) {
                return true; // Filter matches last name.
            }
            else if (String.valueOf(commande.getResteCommandeProperty()).toLowerCase().contains(lowerCaseFilter)) {
                return true; // Filter matches last name.
            }
            else if (String.valueOf(commande.getDateCommande()).toLowerCase().contains(lowerCaseFilter)) {
                return true; // Filter matches last name.
            }
            else if (String.valueOf(commande.getDateReception()).toLowerCase().contains(lowerCaseFilter)) {
                return true; // Filter matches last name.
            }
            else if (String.valueOf(commande.getModified()).toLowerCase().contains(lowerCaseFilter)) {
                return true; // Filter matches last name.
            }
            else if (String.valueOf(commande.getValide()).toLowerCase().contains(lowerCaseFilter)) {
                return true; // Filter matches last name.
            }

            return false; // Does not match.
        });
    });


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

    // 4. Bind the SortedList comparator to the TableView comparator.
    sortedData.comparatorProperty().bind(tableCommandes.comparatorProperty());
    // 5. Add sorted (and filtered) data to the table.
    tableCommandes.setItems(sortedData);
FilteredList filteredData=newfilteredlist(数据,p->true);
// 2. 每当过滤器更改时,设置过滤器谓词。
filterField.textProperty().addListener((可观察、旧值、新值)->{
setPredicate(命令->{
//如果筛选文本为空,则显示所有人员。
if(newValue==null | | newValue.isEmpty()){
返回true;
}
//将每个人的名字和姓氏与筛选文本进行比较。
字符串lowerCaseFilter=newValue.toLowerCase();
if(String.valueOf(commande.getCodeCommande()).toLowerCase()包含(lowerCaseFilter)){
返回true;
//筛选器与第一个名称匹配。
}else if(String.valueOf(commande.getCMD()).toLowerCase()包含(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(commande.getClient()).toLowerCase()包含(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(commande.getFournisseur()).toLowerCase().contains(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(commande.getQuantite()).toLowerCase()包含(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(commande.getPrixCommande()).toLowerCase()包含(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(command.getSommeProperty()).toLowerCase().contains(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(commande.getResteCommandeProperty()).toLowerCase().contains(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(commande.getDateCommande()).toLowerCase()包含(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(commande.getDateReception()).toLowerCase().contains(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(commande.getModified()).toLowerCase()包含(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
else if(String.valueOf(commande.getValide()).toLowerCase()包含(lowerCaseFilter)){
返回true;//筛选器与姓氏匹配。
}
返回false;//不匹配。
});
});
// 3. 将FilteredList包装在一个SortedList中。
SortedList sortedData=新的SortedList(filteredData);
// 4. 将SortedList比较器绑定到TableView比较器。
sortedData.comparatorProperty().bind(tableCommandes.comparatorProperty());
// 5. 将排序(和筛选)数据添加到表中。
tableCommandes.setItems(sortedData);
到目前为止没有问题,我还使用这些代码行根据列值(列标题为“reste”)更改某些列的样式(在我的示例中为颜色):

reste.setCellFactory(列->{
返回新的TableCell(){
@凌驾
受保护的void updateItem(数字项,布尔值为空){
super.updateItem(项,空);
setText(空?“:getItem().toString());
设置图形(空);
TableRow currentRow=getTableRow();
如果(!isEmpty()){
如果(浮动值((浮动)项)>0)
currentRow.setStyle(“-fx背景色:淡珊瑚”);
}
}
};
});
当我过滤这些行时,假设我有三行都是红色的,过滤后我还有一行显示在屏幕上,并且是红色的,太棒了!问题是两个不可见的行仍然显示为红色,尽管它们没有显示!如何禁用可见行的样式设置?
非常感谢

如果您的行为空,请设置其默认颜色:

reste.setCellFactory(column -> {
    return new TableCell<CommandeFX, Number>() {
        @Override
        protected void updateItem(Number item, boolean empty) {
            super.updateItem(item, empty);

            TableRow<BonFX> currentRow = getTableRow();

            if (empty || item == null) {
                setText("");
                setGraphic(null);
                currentRow.setStyle("-fx-background-color:(****your default color****)");
            } else {
                setText(getItem().toString());
            }

            if (!isEmpty()) {
                if (Float.valueOf((float) item) > 0) {
                    currentRow.setStyle("-fx-background-color:lightcoral");
                }

            }
        }
    };
});
reste.setCellFactory(列->{
返回新的TableCell(){
@凌驾
受保护的void updateItem(数字项,布尔值为空){
super.updateItem(项,空);
TableRow currentRow=getTableRow();
if(空| |项==null){
setText(“”);
设置图形(空);
currentRow.setStyle(“-fx背景色:(****您的默认颜色****)”;
}否则{
setText(getItem().toString());
}
如果(!isEmpty()){
如果(浮动值((浮动)项)>0){
currentRow.setStyle(“-fx背景色:淡珊瑚”);
}
}
}
};
});

非常感谢您!
reste.setCellFactory(column -> {
    return new TableCell<CommandeFX, Number>() {
        @Override
        protected void updateItem(Number item, boolean empty) {
            super.updateItem(item, empty);

            TableRow<BonFX> currentRow = getTableRow();

            if (empty || item == null) {
                setText("");
                setGraphic(null);
                currentRow.setStyle("-fx-background-color:(****your default color****)");
            } else {
                setText(getItem().toString());
            }

            if (!isEmpty()) {
                if (Float.valueOf((float) item) > 0) {
                    currentRow.setStyle("-fx-background-color:lightcoral");
                }

            }
        }
    };
});