我的根布局包含2个布局: - OptionsPane - DrawArea
我正在尝试访问OptionsPaneController中的DrawAreaController以调用其draw方法。以下是OptionsPaneController的初始化方法:
@Override
public void initialize(URL url, ResourceBundle rb) {
newDragonButton.addEventHandler(MouseEvent.MOUSE_CLICKED, new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if(newDragonButton.getText().equals("Nowy")){
//do something
}
else{
newDragonButton.setText("Nowy");
FXMLLoader loader = new FXMLLoader(getClass().getResource("/view/DrawArea.fxml"));
DrawAreaController dac = (DrawAreaController) loader.getController();
Dragon dragon = new Dragon(600, 300, 20, 2, 90, 270, colorChooser.getValue());
if(dac == null)
System.out.println("controller = null");
dac.drawDragon(dragon);
}
}
});
}
不幸的是,dac始终为null。
我的代码中是否有任何错误,或者无法在另一个控制器中加载控制器?
答案 0 :(得分:3)
控制器始终为null,因为您从不加载FXMLLoader。
load()
加载fxml并为您实例化控制器实例。如果您在getController()
之前未使用此方法,则会始终返回null
FXMLLoader loader = new FXMLLoader(getClass().getResource("/view/DrawArea.fxml"));
Parent root = loader.load();
DrawAreaController dac = (DrawAreaController) loader.getController();
您可能想要也可能不想存储FXML的根目录。