initialize()如何在JavaFX中工作

时间:2017-07-17 14:48:43

标签: java javafx fxml

我有一部分代码,其中包含我在程序中使用的所有控制器对象。 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;
   }
}

0 个答案:

没有答案