我有一部分代码,其中包含我在程序中使用的所有控制器对象。 topButtonsController
是从FXML文件(fx:include)中注入的唯一一个,其他是由我自己创建的。
我在创建MainController的构造函数之后调用initialize()
方法,因此假设initialize()
方法中的所有方法都应该首先完成它们的工作。
public class MainController {
@FXML
private TopButtonsController topButtonsController;
private AddNewOrderController addNewOrderController = new AddNewOrderController();
private OrdersController ordersController = new OrdersController();
@FXML
private BorderPane borderPane;
@FXML
public void initialize() {
topButtonsController.setMainController(this);
addNewOrderController.setMainController(this);
ordersController.setMainController(this);
System.out.println("Finished injection");
}
}
这里我有另一个FXML文件的控制器类。按下按钮后,应调用acceptButtonClicked
方法,但不幸的是mainController
为空!如果我已经将他设置为MainController initialize
方法中的值,那么为什么会这样,应该先被击中。
public class AddNewOrderController {
private MainController mainController;
@FXML
private TextField nameOfPizzaTextField;
private ArrayList<Order> arrayList = new ArrayList<Order>();
private ObservableList<Order> observableList = FXCollections.observableArrayList(arrayList);
@FXML
private Button acceptButton;
@FXML
void acceptButtonClicked(ActionEvent event) {
if(mainController == null) {
System.out.println("MainController is null!!"); //it is printed, why?
}
Order order = new Order(nameOfPizzaTextField.getText());
arrayList.add(order);
observableList.add(order);
System.out.println("Dodano "+nameOfPizzaTextField.getText()+"do listy");
System.out.println(observableList);
mainController.getOrdersController().getListView().setItems(mainController.getAddNewOrderController().getObservableList()); // here occurs error
@FXML
public void initialize() {
}
public void setMainController(MainController mainController) {
this.mainController= mainController;
}
}