У меня есть таблица, содержащая несколько столбцов и строк, в которые можно добавлять новые строки, существующие строки можно редактировать и удалять.Существует столбец действия, в котором соответствующее значение строки будет истинным, если произойдет какое-либо изменение.И моя таблица фильтруется (сортируется).Теперь я пытаюсь обнаружить изменения в моей таблице, такие как редактирование, добавление или удаление.Я попытался сделать это через 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).Может ли кто-нибудь помочь мне в этом отношении, пожалуйста?