我试图制作一个通过舞台打开的Modal窗口。这是代码:

Stage stage = new Stage();
Parent root = fxmlLoader.load();
stage.setScene(new Scene(root));
stage.setTitle("Stuff");
stage.initModality(Modality.WINDOW_MODAL);
stage.show();


但是,按照我的能力,单击下面的窗口并没有实际成功。
我做错了什么吗?

编辑:
我在Oracle网站上查阅了早期文档,但是可以找到解决方案,因为显示的窗口的行为与“模态窗口”的预期行为并不太相像。
我在此项目上使用的JDK是1.8.0_40

编辑2:
根据ItachiUchiha的要求,句柄中的代码

Boolean confirmacion = MessageUtil.ventanaConfirmacion(RecursosUtil.creaTextoProperties("confNoRealizar"));

if (confirmacion) {
    try {
        TbInspeccion inspeccionSeleccionada = (TbInspeccion) getTableRow().getItem();

        URL location = cargaURLFXML(OBSERVACIONESFXML);
        FXMLLoader fxmlLoader = cargaFXML(location);

        stage = new Stage();
        Parent root = fxmlLoader.load();
        stage.setScene(new Scene(root));
        stage.setTitle("Observaciones");

        ObservacionesController controller = (ObservacionesController) fxmlLoader.getController();
        controller.setStage(stage);
        controller.setInspeccion(inspeccionSeleccionada);
        controller.setProvider(provider);
        controller.setTablaPrincipal(tablaPrincipal);

        stage.initModality(Modality.APPLICATION_MODAL);
        stage.show();
    } catch (IOException ex) {
        Exceptions.printStackTrace(ex);
    }
}


感谢您的时间和帮助。

最佳答案

更换

stage.initModality(Modality.WINDOW_MODAL);




stage.initModality(Modality.APPLICATION_MODAL);


前者阻止如下:


  定义一个模式窗口,该窗口阻止事件传递到窗口
  整个所有者窗口层次结构。


而后者:


  定义一个模式窗口,该窗口阻止事件传递给任何事件
  其他应用程序窗口。


资料来源:https://docs.oracle.com/javase/8/javafx/api/javafx/stage/Modality.html

根据您想要实现上述行为的原因,您可能希望使用JDK 8 Update 40中提供的JavaFX 8 Dialog

07-25 23:46