如何在JavaFX中从JFXPanel打开模态对话框?

时间:2012-09-14 10:53:57

标签: javafx javafx-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应用程序,则没有主要阶段。

2 个答案:

答案 0 :(得分:0)

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

OR

为对话框场景创建一个JFrame,其中包含另一个JFXPanel。

答案 1 :(得分:0)

获得JFXPanel的舞台:

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

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

或者说明这个技术问题:如果你有一个纯JavaFx应用程序,你将只有一个Stage。如果我错了,请纠正我。

因此,要显示模态窗口,您可以传递Window实例,如代码示例中所示,或传递null。