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