2016-10-11 81 views
1

我使用JavaFX的Swing應用程序,與JFXPanel使用與JFXPanel。我一直在用css文件手動編寫JavaFX UI。我正在使用NetBeans 8.1。JavaFX的場景生成器 - 它是在Swing

我想知道,在這種情況下,我可以使用JavaFX的場景生成器生成的用戶界面? AFAIK,輸出是表示UI組件的FXML文件。這與JFXPanel使用JavaFX的方式是否兼容?

謝謝!

回答

1

如果你要管理的JFXPanel本身,Swing組件,在場景生成器,那麼簡單的答案是「否」。

從純粹的實踐角度來看,SceneBuilder不支持Swing組件,這就是您將要添加到JFXPanel中的內容。

另一個問題是與線程有關。 Scene Builder只生成FXML。 FXML通過其load(...)方法之一由FXMLLoader加載。該方法必須在單個線程上執行。如果混合使用Swing組件和JavaFX組件,則必須適當地管理線程,如JFXPanel documentation中所述。由於您無法告訴FXMLLoader要在JavaFX應用程序線程上處理FXML的哪些部分以及要在AWT事件派發線程上處理哪些部分,因此無法加載描述Swing和JavaFX混合的FXML文件遵守這兩個工具包的線程規則的組件。

很明顯,你可以使用場景生成器只是爲了管理JFXPanel的內容;這與Scene Builder的「常規」用法相同。同樣,所有的Scene Builder都會生成FXML,而FXML只是描述了要創建什麼對象以及它們如何相互關聯。所以你可以這樣做

private JFXPanel jfxPanel ; 

// build Swing components, initialize jfxPanel, etc 

// run on FX Application Thread: 
private void initFX() { 

    FXMLLoader loader = new FXMLLoader(getClass().getResource("/path/to/fxml/file")); 
    Parent root = loader.load(); 
    Scene scene = new Scene(root); 
    jfxPanel.setScene(scene); 
} 
+0

因爲應用程序是用Swing編寫的,所以遷移到JavaFX並不是一件容易的事情。因此,對於新添加的UI,我開始使用JFXPanel編寫JavaFX。使用SceneBuilder,是否有可能只包含部分UI,這是新添加的JavaFX UI?如果是,那麼我不需要在代碼和css中設計JavaFX組件,這很耗時。 –

+0

好的,我從你的問題中瞭解到你想在Scene Builder中創建/編輯'JFXPanel'和其他Swing組件。如果你只想使用Scene Builder來生成JFXPanel的內容,那麼你當然可以這樣做:它和你通常使用它的方式完全一樣。 –