我如何使用同一对象调用 class 之外的方法

How do i call a method outside a class with the same object

我有一个由 BorderPane 扩展的 Classe FoodManagerPane。在此 class 中,我使用不同的 class 组件构建我的窗格。例如,我有一个 class MenuBar,我在这个 FoodManagerPane 中初始化它并插入到窗格中。

FoodManagerPane 扩展 BorderPane

public class FoodManagerPane extends BorderPane {
     private MenuBarView menuBarView = new MenuBarView();
     private Button buttonDelete = null;
     ...

     private Button getButtonDelete() {
      if (buttonDelete == null) {
        buttonDelete = new Button("Delete");
        buttonDelete.setOnAction(deleteEvent);
      }
     return buttonDelete;
     }

     public void refreshData() {
     this.getFoodTableView().setItems(DataHandler.INSTANCE.foodlist());
     }
}

DataHandler.INSTANCE.foodlist() returns 列表的当前条目

在这个 class 中,除其他外,我还有方法 refreshData(),它将 ObservableList 中的数据与视图同步。

我还创建了一个按钮来从我的列表中删除对象。我在单独的 class.

中为此定义了 ActionEvent

DeleteButton 的 ActionEvent

public class DeleteFoodEventHandler implements EventHandler<ActionEvent> {

private final FoodTableView foodTableView = new FoodTableView();

@Override
public void handle(ActionEvent event) {
    //do something

    foodTableView.setItems(DataHandler.INSTANCE.foodlist());
    }
}

}

所以在我的 ActionEvent class 中我定义了元素应该从列表中删除(有效)但是我想直接更新 table,不幸的是它在这里不起作用。

如果我直接在 FoodManagerPane 中定义 ActionHandler 并在此处调用方法 refreshData(),它就可以工作。但我想将活动外包。这里有人有想法吗?

更新: DataHandler-Class

public enum DataHandler {

INSTANCE;

private boolean update;

private List<Food> foodlist = null;

DataHandler() {
    getFoodlist();
}

public ObservableList<Food> foodlist() {
    return FXCollections.observableArrayList(getFoodlist());
}

private List<Food> getFoodlist() {
    if (foodlist == null) {
        foodlist = new ArrayList<>();
    }
    System.out.println("The List: " + foodlist);
    return foodlist;
}

public void createFood(Food food) {
    System.out.println("createFood()");
    this.foodlist.add(food);
    update = true;
}

public void deleteFood(Food food) {
    System.out.println("deleteFood()");
    this.foodlist.remove(food);
    update = true;
}

public void deleteFoodlist(List<Food> foodlist) {
    System.out.println("deleteFoodlist()");
    for (Food food : foodlist) {
        deleteFood(food);
    }
}

如果有人遇到类似问题,这是解决方案。非常感谢 @kendavidson

public class AddFoodEventHandler {

public void addFood(TableView tableView) {
    
    try {
        //do something
        } else {
            // do more
            // refresh the tableView
            tableView.setItems(DataHandler.INSTANCE.foodlist());
        }
    } 
}

}