参考的这个网址的方法http://statsciolist.blogspot.com/2013/04/javafx-modal-dialog-with-controller.html
- 在main函数里面建立Controller的对象,并且在Controller里面建立一个添加Stage的方法。
- 建立新的对话框fxml文件,和主fxml的建立方法一样
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
try {
/*Parent root = FXMLLoader.load(getClass().getResource("study.fxml"));
Scene scene = new Scene(root, 1000, 600);
primaryStage.initStyle(StageStyle.DECORATED);
primaryStage.setScene(scene);
primaryStage.setTitle("Stony * Health");
primaryStage.show(); */
FXMLLoader loader = new FXMLLoader();
loader.setLocation(getClass().getResource("study.fxml"));
loader.load();
Parent root = loader.getRoot();
//主控制器的对象,用于获取主函数中的Stage对象
Controller c =(Controller)loader.getController();
c.setStage(primaryStage);
Scene scene = new Scene(root,1000,600);
primaryStage.setScene(scene);
primaryStage.show();
} catch(Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
launch(args);
}
}这个main函数的代码,重点在于获取Stage对象传入Controller中。如果要在对话框中要再建立对话框,就一直重复嵌套下去。public Stage primaryStage;//建立Stage对象
{
FXMLLoader loader = new FXMLLoader();
//Dialog.fxml为对话框的fxml文件
loader.setLocation(getClass().getResource("Dialog.fxml"));
try {
loader.load();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
Parent root = loader.getRoot();
Stage modal_dialog = new Stage(StageStyle.DECORATED);
modal_dialog.initModality(Modality.WINDOW_MODAL);
//把主窗口和子窗口联系起来。不加也可以
modal_dialog.initOwner(primaryStage);
Scene scene = new Scene(root);
modal_dialog.setScene(scene);
modal_dialog.show();
}
//在主函数中获取primaryStage对象的公共方法
public void setStage(Stage temp)
{
primaryStage = temp;
}