将数据传递给控制器JAVAFX

将数据传递给控制器JAVAFX,java,javafx,netbeans-8,Java,Javafx,Netbeans 8,我试图将数据(变量)从一个阶段传递到另一个阶段,但当我试图在第二个阶段访问它们时,它们是空的。主窗口的代码。转到window1 public class PrincipalController { private Stage primaryStage; public void initStage( Stage stage){ primaryStage = stage;} @FXML private void goWindow1(ActionEvent event) { tr

我试图将数据(变量)从一个阶段传递到另一个阶段,但当我试图在第二个阶段访问它们时,它们是空的。主窗口的代码。转到window1

 public class PrincipalController {
 private Stage primaryStage;
 public void initStage( Stage stage){ primaryStage = stage;}



@FXML
 private void goWindow1(ActionEvent event) {
    try {
         FXMLLoader miCargador = new
                 FXMLLoader(getClass().getResource("/vista/Window1.fxml"));
         Parent root = (Parent) miCargador.load();

                     // Access to window driver 1


 Window1Controller window1 = miCargador.
                  <window1Controlador>getController();
      windnow1.initStage(primaryStage);
      Scene scene = new Scene(root);
      primaryStage.setScene(scene);
      primaryStage.show();
     } catch (IOException e) {e.printStackTrace();}
    }
}
如果我想访问以前收到的标题,则返回空

/**
     * Initializes the controller class.
     * @param url
     * @param rb
     */
    @Override
    public void initialize(URL url, ResourceBundle rb) {
       System.out.println(""+ this.tituloAnterior);}
初始化在显示“Window1”时显示空值 }

在加载FXML文件的过程中调用
initialize()
方法-换句话说,在调用
miCargador.load()
时调用该方法

显然,这是在调用
window1.initStage(…)
之前发生的,因此当调用
initialize()
时,
tituloAnterior
仍然为空

简单的解决方案不是在
initialize()
方法中访问
tituloAnterior
,而是在
initStage()
方法中执行您需要执行的任何操作。例如

public void initStage(Stage stage){
     primaryStage = stage;
     escenaAnterior = stage.getScene();
     tituloAnterior = stage.getTitle();
     primaryStage.setTitle("Window 1");
     someLabelFromFXML.setText(tituloAnterior);
 }

如果愿意,可以在Java代码中设置FXML加载程序的控制器:

@FXML
private void goWindow1(ActionEvent event) {
    try {
         FXMLLoader miCargador = new
                 FXMLLoader(getClass().getResource("/vista/Window1.fxml"));

         Window1Controller window1 = new Window1Controller();
         window1.initStage(primaryStage);
         miCargador.setController(window1);

         Parent root = (Parent) miCargador.load();

                     // Access to window driver 1



      Scene scene = new Scene(root);
      primaryStage.setScene(scene);
      primaryStage.show();
     } catch (IOException e) {e.printStackTrace();}
    }
}

然后从FXML文件中删除
fx:controller
属性。这样,在调用
load()
方法之前调用
initStage()
方法,调用
initialize()
时,
tituloainterior
将不会为空。

请用英语翻译并共享异常跟踪。我已经修改了它,您可以帮助我吗?步骤1。在加载Window1 class 2之前打印对象。打印Window1类中的对象。我相信你会与众不同。您现在应该尝试传递对象并进行验证。如果它能工作,这意味着在配置中的某些地方需要绑定类,这是丢失的。我如何从FXML文件中删除fx:controller属性?@MelDiaz是否删除它?从window1.FXML?@MelDiaz是,从
window1.FXML
。只有在使用第二种解决方案(用Java代码设置控制器)时才需要它。正如我在回答中所说,我认为首先避免访问在
initialize()
方法中设置的属性更简单。但是,我必须删除fx:controller中的哪一个?
@FXML
private void goWindow1(ActionEvent event) {
    try {
         FXMLLoader miCargador = new
                 FXMLLoader(getClass().getResource("/vista/Window1.fxml"));

         Window1Controller window1 = new Window1Controller();
         window1.initStage(primaryStage);
         miCargador.setController(window1);

         Parent root = (Parent) miCargador.load();

                     // Access to window driver 1



      Scene scene = new Scene(root);
      primaryStage.setScene(scene);
      primaryStage.show();
     } catch (IOException e) {e.printStackTrace();}
    }
}