2012-09-14 56 views
1

要顯示的模態對話框下面的代碼應該使用:如何從JavaFX中的JFXPanel打開模態對話框?

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應用程序,那麼沒有主要階段。

+0

jfxpanel.getScene()。getWindow返回什麼? – jewelsea

+0

[email protected] 錯誤:不支持的類型所有者的[email protected] 異常中可運行 java.lang.ClassCastException:com.sun.javafx.tk .quantum.EmbeddedStage不能轉換爲com.sun.javafx.tk.quantum.WindowStage –

+0

在http://javafx-jira.kenai.com,您可以在階段中針對運行時項目記錄bug /功能請求以獲得支持。由jfxpanel.getScene()。getWindow()返回的Window的initOwner()。 – jewelsea

回答

0

將一個空值傳遞給initOwner(因爲你的對話是APPLICATION_MODAL,而不是WINDOW_MODAL,其副作用可能不會太劇烈)。

OR

在它爲你的對話場景中創建另一個JFXPanel的JFrame。

+0

我的對話框是WINDOW_MODAL。我錯誤地從不同的地方複製了代碼。我更正了我的問題中的代碼。 –

0

要獲得JFXPanel階段:

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

但要注意的是你所得到的將不是一定是舞臺的一個實例是很重要的。它將是Window的一個實例(Stage的超類)。在swing應用程序的情況下,它將返回一個EmbeddedWindow實例(這不是一個Stage)。

或者另行聲明此技術答案:如果您擁有純JavaFx應用程序,則只有階段。如果我錯了,請糾正我。

因此,要顯示您的模式窗口,您可以傳遞窗口實例,如代碼示例中所示或傳遞null。

相關問題