我试图制作一个通过舞台打开的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