tableview:检测过滤列表中的更改

时间:2018-06-24 06:01:57

标签: java javafx

我有一个包含多个列和行的表,可以在其中添加新行,可以编辑和删除现有行。有一个操作列,如果发生任何更改,相应的行值将为true。和我的表被过滤(排序)。现在,我试图检测表中的更改,例如已编辑,添加或删除。我尝试通过ListChangeListener进行此操作,这是我的相关代码,一目了然。

enter image description here

private ObservableList<ModelBrFloor> floordata =FXCollections.observableArrayList(floor ->
        new Observable[] {
           floor.FloorNameProperty(),
           floor.FloorCodeProperty(),
        floor.FloorNumberProperty()

        });
private ObservableList<ModelBrFloor> getInfo(ModelBrBuilding building) {


            floordata.addListener((ListChangeListener.Change<? extends ModelBrFloor> c) -> {
                   while (c.next()) {
                       if (c.wasAdded()) {
                           System.out.println("Added:");
                           c.getAddedSubList().forEach(System.out::println);
                           System.out.println();
                       }
                       if (c.wasRemoved()) {
                           System.out.println("Removed:");
                           c.getRemoved().forEach(System.out::println);
                           System.out.println();
                       }
                       if (c.wasUpdated()) {
                            //have to make column value true here
                           System.out.println("Updated:");
                           floordata.subList(c.getFrom(), c.getTo()).forEach(System.out::println);
                           System.out.println();
                       }
                   }
                });
            floordata = FXCollections.observableArrayList(implementation.getFloor(building));

            FilteredList<ModelBrFloor> filteredData = new FilteredList<>(floordata,p->true);
            txtFloorName.textProperty().addListener((observable,oldValue,newValue)->{
                filteredData.setPredicate(BCode->{
                if(newValue== null||newValue.isEmpty())
                {   return true;

                }
                String lowerCasefilter=newValue.toLowerCase();
                if(BCode.getFloorName()!=null)
                 if (BCode.getFloorName().toLowerCase().contains(lowerCasefilter)){
                    return true;
                }
                return false;
                });

            });
            txtFloorShort.textProperty().addListener((observable,oldValue,newValue)->{
            filteredData.setPredicate(BCode->{
                if(newValue== null || newValue.isEmpty())
                    return true;
                String lowerCasefilter= newValue.toLowerCase();
                if(BCode.getFloorCode()!=null)
                if(BCode.getFloorCode().toLowerCase().contains(lowerCasefilter))
                    return true;
                return false;
            });

            });
            txtFloorNo.textProperty().addListener((observable,oldValue,newValue)->{
                filteredData.setPredicate(BCode->{
                    if(newValue== null || newValue.isEmpty())
                        return true;
                    int val=BCode.getFloorNumber();
                    if(String.valueOf(val).equals(newValue))
                        return true;
                    return false;
                    });
            });

            SortedList sortedData = new SortedList(filteredData);

            sortedData.comparatorProperty().bind(tableBuilding.comparatorProperty());
            return sortedData;

        }

我的问题是此代码可以很好地编译,但是什么也不打印(也不确定如何将经过编辑的行将false转换为true)。有人可以在这方面帮助我吗?

0 个答案:

没有答案