只从 Tableview 中删除而不是 observableList
Only removes from Tableview not observableList
好的,我得到了这个 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);
}
任何人都知道为什么它不会删除对象
您应该使用 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);
}
好的,我得到了这个 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);
}
任何人都知道为什么它不会删除对象
您应该使用 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);
}