gpt4 book ai didi

java - 在排序表中添加空行

转载 作者:行者123 更新时间:2023-11-29 04:18:14 25 4
gpt4 key购买 nike

我有一个包含两个按钮(搜索、添加)的表格。这里的搜索按钮填充表中的排序数据(也过滤)。现在我想在表格底部添加空行。当我的表为空时它工作正常但当有数据时它显示 java.lang.UnsupportedOperationException 异常。我猜这是因为 SortedLists 是不可修改的。我该如何解决这个问题?我想在表格顶部添加新行,但我也想要搜索/过滤工具。在这里我试图获得我的搜索结果

private ObservableList<ModelBrFloor> getInfo(ModelBrBuilding building) {
ObservableList list=FXCollections.observableArrayList();
List<ModelBrFloor> flr= implementation.getFloor(building);
flr.stream().forEach(list:: add);
FilteredList <ModelBrFloor> filteredData= new FilteredList<>(list,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().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().toLowerCase().contains(lowerCasefilter))
return true;
return false;
});

});


SortedList sortedData = new SortedList(filteredData);
sortedData.comparatorProperty().bind(tableFloor.comparatorProperty());

return sortedData;

}

我在这里尝试添加一个空行

@FXML
private void addFloor() {

tableFloor.getItems().add(0,new ModelBrFloor());// Error line

}

N.B 我看过this但我不清楚。

最佳答案

您不能修改 SortedList/FilteredList,因为它们只是另一个列表的 View 。您需要修改原始列表:

private ObservableList<ModelBrFloor> data;

private ObservableList<ModelBrFloor> getInfo(ModelBrBuilding building) {
data = FXCollections.observableArrayList(implementation.getFloor(building));

FilteredList<ModelBrFloor> filteredData = new FilteredList<>(list);
txtFloorName.textProperty().addListener((observable, oldValue, newValue)->{
if (newValue == null || newValue.isEmpty()) {
filteredData.setPredicate(null);
} else {
final String lowerCasefilter = newValue.toLowerCase();
filteredData.setPredicate(BCode -> {
// keep empty and matching rows
return isEmptyRow(BCode) || BCode.getFloorName().toLowerCase().contains(lowerCasefilter);
});
}

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

});

SortedList<ModelBrFloor> sortedData = new SortedList<>(filteredData);
sortedData.comparatorProperty().bind(Bindings.createObjectBinding(() -> {
final Comparator<ModelBrFloor> comparator = tableFloor.getComparator();
return comparator == null ? null : (a, b) -> {
// sort empty rows to the top, then use comparator
if (isEmptyRow(a)) {
return isEmptyRow(b) ? 0 : -1;
} else {
return isEmptyRow(b) ? 1 : comparator.compare(a, b);
}
};
},
tableFloor.comparatorProperty()));

return sortedData;
}

@FXML
private void addFloor() {
data.add(0, new ModelBrFloor());
}

isEmptyRow 是一种检查 ModelBrFloor 是否为空的方法。

关于java - 在排序表中添加空行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50946079/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com