从下图可以看到,我想从表中选择某项(每当我按下垂直框左侧的按钮即“概述”,“订单” ...时,它都会更改)并删除记录来自数组(即内容的来源)。
我采用的方法很有效,但是它并不优雅,因为我必须为每个按钮id创建最多8个if语句。有什么办法可以动态删除内容。 JVM是否有办法找出哪个记录属于哪个数组列表?
TableController
@FXML
private TableView<Object> defaultTableView;
public void delete(){
if( MockServer.getServer().currentButton.equals("btnIngredients"))
MockServer.getServer().removeIngredient(defaultTableView.getSelectionModel().getSelectedItem());
else if ( MockServer.------.equals("btnOrders"))
MockServer.getServer().removeOrder(defaultTableView.getSelectionModel().getSelectedItem());
}
控制器
@FXML
private TableController tableController;
@FXML
public void deleteRecord(ActionEvent event){
tableController.delete();
}
MockServer
public class MockServer implements ServerInterface {
public Restaurant restaurant;
public ArrayList<Dish> dishes = new ArrayList<Dish>();
public ArrayList<Drone> drones = new ArrayList<Drone>();
public ArrayList<Ingredient> ingredients = new ArrayList<Ingredient>();
public ArrayList<Order> orders = new ArrayList<Order>();
public ArrayList<Staff> staff = new ArrayList<Staff>();
public MockServer(){}
public ArrayList<Ingredient> getIngredients() { return this.ingredients; }
public ArrayList<Order> getOrders() { return this.orders; }
public ArrayList<Staff> getStaff() { return this.staff; }
....
static public ServerInterface getServer(){
return server;
}
@Override
public void removeIngredient(Ingredient ingredient) {
int index = this.ingredients.indexOf(ingredient);
this.ingredients.remove(index);
this.notifyUpdate();
}
}
答案 0 :(得分:1)
此伪代码将需要重构,因为我没有您正在使用的所有代码,但我希望您能有所了解
好吧,我相信在按钮单击代码中,您必须告诉模拟服务器当前正在使用的列表,请尝试将其添加到模拟服务器中
List currentList = null;
public void setCurrentList(String listName) { // you can use integer but the best is to use enum type setCurrentList(enum) this way you will get tapeSafety
switch(listName){
case "ingredients" : currentList = ingredients ; break;
//other cases
default : throw new Exception(" list not referred error with key value"+listName);
}
}
public void delete(Object o){
int index = this.currentList.indexOf(o);
this.currentList.remove(index);
}
现在您可以像下面那样更新控制器删除
public void delete(){
MockServer.getServer().delete(defaultTableView.getSelectionModel().getSelectedItem());
}
为什么这应该起作用?
您必须知道,有一种好的做法是向接口而不是实现说明代码
您知道Java中的 List 是一个接口,因此当我分配成分对象时,该接口将引用与该对象相同的ArrayList并采取所有行为(如何搜索成分对象等),当我们在单击按钮后在运行时使用currentList时,可以确保currentList与单击的列表相同,并指向内存中的同一列表
希望这个简单且真正的简历说明可以为您提供帮助