Java 仅从Tableview中删除,不从observableList中删除
好的,我得到了这个javafx应用程序,我得到了锻炼,我可以通过肌肉群过滤它们,但是当它未过滤时,我的程序将对象从Obserable list和tableView中删除,但当它过滤后,它只从tableView中删除,但对象仍然保留。所以下次我再过滤它 这是我的观察者Java 仅从Tableview中删除,不从observableList中删除,java,javafx,tableview,observablelist,Java,Javafx,Tableview,Observablelist,好的,我得到了这个javafx应用程序,我得到了锻炼,我可以通过肌肉群过滤它们,但是当它未过滤时,我的程序将对象从Obserable list和tableView中删除,但当它过滤后,它只从tableView中删除,但对象仍然保留。所以下次我再过滤它 这是我的观察者 ObservableList<Exercise> filteredExercises = FXCollections.observableArrayList(); ObservableList<Exercise&
ObservableList<Exercise> filteredExercises = FXCollections.observableArrayList();
ObservableList<Exercise> exercises = FXCollections.observableArrayList();
下面是删除方法
@FXML
private void deleteExercise(ActionEvent event) {
Exercise selectedItem = exTable.getSelectionModel().getSelectedItem();
for (Exercise e : exercises){
if(selectedItem == e){
exercises.remove(e);
}
}
exTable.getItems().remove(selectedItem);
System.out.println(exercises);
}
任何人都有一个解决方案来解释为什么它不能删除对象您应该使用一个来实现此功能:
// create the lists:
ObservableList<Exercise> exercises = FXCollections.observableArrayList();
// initialize the filtered list with a filter that is always true
// (i.e. no filtering)
ObservableList<Exercise> filteredExercises = exercises.filtered(exercise -> true);
// use the filtered list as the items list for the table:
public void initialize() {
// ...
exTable.setItems(filteredExercises);
// ...
}
// filter by setting the predicate on the filtered list:
@FXML
private void filterByChest(ActionEvent event) {
filteredExercises.setPredicate(
exercise -> exercise.getFocusGroup().toLowerCase().contains("chest"));
}
// manipulate the list by adding/removing elements to/from the underlying list:
@FXML
private void deleteExercise(ActionEvent event) {
Exercise selectedItem = exTable.getSelectionModel().getSelectedItem();
exercises.remove(selectedItem);
}
//创建列表:
ObservableList exercises=FXCollections.observableArrayList();
//使用始终为true的筛选器初始化筛选列表
//(即无过滤)
ObservableList filteredExercises=exercises.filtered(exercise->true);
//将筛选后的列表用作表的项目列表:
公共无效初始化(){
// ...
exTable.setItems(filteredExercises);
// ...
}
//通过在筛选列表上设置谓词进行筛选:
@FXML
私有无效筛选器ByChest(ActionEvent事件){
filteredExercises.setPredicate(
exercise->exercise.getFocusGroup().toLowerCase().contains(“胸部”);
}
//通过在基础列表中添加/删除元素来操作列表:
@FXML
私人活动(ActionEvent事件){
练习selectedItem=exTable.getSelectionModel().getSelectedItem();
练习。移除(选择编辑项);
}
此功能应使用:
// create the lists:
ObservableList<Exercise> exercises = FXCollections.observableArrayList();
// initialize the filtered list with a filter that is always true
// (i.e. no filtering)
ObservableList<Exercise> filteredExercises = exercises.filtered(exercise -> true);
// use the filtered list as the items list for the table:
public void initialize() {
// ...
exTable.setItems(filteredExercises);
// ...
}
// filter by setting the predicate on the filtered list:
@FXML
private void filterByChest(ActionEvent event) {
filteredExercises.setPredicate(
exercise -> exercise.getFocusGroup().toLowerCase().contains("chest"));
}
// manipulate the list by adding/removing elements to/from the underlying list:
@FXML
private void deleteExercise(ActionEvent event) {
Exercise selectedItem = exTable.getSelectionModel().getSelectedItem();
exercises.remove(selectedItem);
}
//创建列表:
ObservableList exercises=FXCollections.observableArrayList();
//使用始终为true的筛选器初始化筛选列表
//(即无过滤)
ObservableList filteredExercises=exercises.filtered(exercise->true);
//将筛选后的列表用作表的项目列表:
公共无效初始化(){
// ...
exTable.setItems(filteredExercises);
// ...
}
//通过在筛选列表上设置谓词进行筛选:
@FXML
私有无效筛选器ByChest(ActionEvent事件){
filteredExercises.setPredicate(
exercise->exercise.getFocusGroup().toLowerCase().contains(“胸部”);
}
//通过在基础列表中添加/删除元素来操作列表:
@FXML
私人活动(ActionEvent事件){
练习selectedItem=exTable.getSelectionModel().getSelectedItem();
练习。移除(选择编辑项);
}
您应该从deleteExercise
方法中得到一个异常,因为您不能在迭代列表时修改它。为什么不为此使用预定义类?我无法使FilteredList正常工作您应该从DeleteExecute
方法中获得异常,因为您无法在迭代列表时修改它。为什么不使用预定义的类呢?我无法使FilteredList正常工作