my image https://i.stack.imgur.com/k8IF6.png我试图将数据(变量)从一个阶段传递到另一个阶段,但是当我尝试在第二阶段访问它们时,它们为空。主窗口的代码。转到窗口1
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();}
}
}
// 窗口1类:
public class Window1Controlador {
private Stage primaryStage;
private Scene escenaAnterior;
private String tituloAnterior;
public void initStage(Stage stage){
primaryStage = stage;
escenaAnterior = stage.getScene();
tituloAnterior = stage.getTitle();
primaryStage.setTitle("Window 1");
}
如果我想访问我收到的先前标题,则为空
/**
* Initializes the controller class.
* @param url
* @param rb
*/
@Override
public void initialize(URL url, ResourceBundle rb) {
System.out.println(""+ this.tituloAnterior);}
当初始化应该显示“Window1”时,初始化显示为 null
}
The initialize()
方法作为加载 FXML 文件过程的一部分被调用 - 换句话说,它在您调用时被调用miCargador.load()
.
显然会发生这种情况before你打电话window1.initStage(...)
,所以当initialize()
被调用,tituloAnterior
仍然为空。
简单的解决方案就是不访问tituloAnterior
in the initialize()
方法,但可以在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();}
}
}
然后删除fx:controller
FXML 文件中的属性。这样一来initStage()
方法在之前被调用load()
方法,以及tituloAnterior
时不会为空initialize()
叫做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)