访问另一个控制器中的控制器class
Access controller in another controller class
我有包含 2 个布局的根布局:
- 选项面板
- 绘制区域
我正在尝试访问 OptionsPaneController 中的 DrawAreaController 以调用其绘制方法。下面是 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 始终为空。
我的代码有没有错误,或者无法在另一个控制器中加载控制器?
控制器始终为空,因为您从不加载 FXMLLoader。
load()
加载 fxml 并为您实例化控制器实例。如果你在getController()
之前不使用这个方法,它会一直returnnull
FXMLLoader loader = new FXMLLoader(getClass().getResource("/view/DrawArea.fxml"));
Parent root = loader.load();
DrawAreaController dac = (DrawAreaController) loader.getController();
您可能想要也可能不想存储 FXML 的根..
我有包含 2 个布局的根布局: - 选项面板 - 绘制区域
我正在尝试访问 OptionsPaneController 中的 DrawAreaController 以调用其绘制方法。下面是 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 始终为空。
我的代码有没有错误,或者无法在另一个控制器中加载控制器?
控制器始终为空,因为您从不加载 FXMLLoader。
load()
加载 fxml 并为您实例化控制器实例。如果你在getController()
之前不使用这个方法,它会一直returnnull
FXMLLoader loader = new FXMLLoader(getClass().getResource("/view/DrawArea.fxml"));
Parent root = loader.load();
DrawAreaController dac = (DrawAreaController) loader.getController();
您可能想要也可能不想存储 FXML 的根..