【问题标题】:Only removes from Tableview not observableList仅从 Tableview 中删除而不是 observableList
【发布时间】:2017-05-03 11:43:56
【问题描述】:

好的,我得到了这个 javafx 应用程序,如果我有锻炼,我可以通过肌肉群过滤它们,但是当它未过滤时,我的程序会从可观察列表和 tableView 中删除对象,但是当它被过滤时,它只会从 tableview 中删除,但对象仍然存在.所以下次我过滤它的时候。

这是我的 observableLists

ObservableList<Exercise> filteredExercises = FXCollections.observableArrayList();
 ObservableList<Exercise> exercises = FXCollections.observableArrayList();

这里是过滤方法

  @FXML
private void filterByChest(ActionEvent event) {
    filteredExercises.clear();
    for (Exercise xercise : exercises) {
        System.out.println(xercise);

        if(xercise.getFocusGroup().toLowerCase().contains("chest")){
            filteredExercises.add(new Exercise(xercise.getName(), xercise.getFocusGroup(), xercise.getTool(), xercise.getPb()));
        }
    }
       exTable.setItems(filteredExercises);
}

这里是删除方法

 @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);
}

任何人都可以解决为什么它不会删除对象

【问题讨论】:

  • 您应该从您的 deleteExercise 方法中得到一个异常,因为您在迭代列表时无法修改它。为什么不为此使用预定义的 FilteredList 类?
  • 我无法让 FilteredList 工作

标签: java javafx tableview observablelist


【解决方案1】:

您应该为此功能使用FilteredList

// 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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-28
    • 2020-02-14
    • 2018-01-09
    • 1970-01-01
    相关资源
    最近更新 更多