2

要显示模态对话框,应使用以下代码:

val dialogStage:Stage = new Stage();
dialogStage.initOwner(ownerStageWindow)
dialogStage.initModality(javafx.stage.Modality.WINDOW_MODAL);
val scene = new Scene(...)
dialogStage.setScene(scene)
dialogStage.show();

但是在哪里以及如何获得所有者阶段?
如果我使用 JFXPanel 作为根组件嵌入 JavaFX 应用程序,则没有初级阶段。

4

2 回答 2

0

要获得 JFXPanel 的阶段:

Field f = JFXPanel.class.getDeclaredField("stage");
f.setAccessible(true);
stage = (Window)f.get(fxPanel);

但重要的是要注意,您得到的不一定是 Stage 的实例。它将是 Window 的一个实例(舞台的超类)。对于 swing 应用程序,它将返回一个 EmbeddedWindow 实例(它不是 Stage)。

或者以其他方式陈述这个技术答案:如果您有一个纯 JavaFx 应用程序,您将只有一个 Stage。如果我错了,请纠正我。

因此,要显示您的模态窗口,您可以传递代码示例中所示的 Window 实例或传递一个空值。

于 2014-05-28T09:50:33.390 回答
0

将一个空值传递给 initOwner(因为您的对话框是 APPLICATION_MODAL,而不是 WINDOW_MODAL,因此它的副作用可能不会太剧烈)。

或者

为您的对话场景创建一个包含另一个 JFXPanel 的 JFrame。

于 2012-09-14T22:43:45.203 回答