有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java initialize()在JavaFX中如何工作

我有一部分代码,其中包含我在程序中使用的控制器的所有对象。topButtonsController是从FXML文件(fx:include)注入的唯一一个,其他的都是我自己创建的

我确认initialize()方法是在创建MainController的构造函数之后调用的,因此假设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为空!如果我已经在MainControllerinitialize方法中将其设置为一个值,那么应该首先命中该值

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) 个答案