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