2013-02-09 67 views
5

我想知道如何可以與JavaFX的場景生成器結合使用fx:include,因此:JavaFX的場景生成器和FX:包括

想象我有一個BorderPane(文件borderpane.fxml)。在中間部分,我想要放置一個Label,然而它應該在單獨的FXML文件中定義,例如, label.fxml

的第一個問題:因爲label.fxml將被集成到一個容器(BorderPane)中,所以它本身不需要一個容器。然而,SceneBuilder僅提供了創建作爲容器的佈局的選項?

問題二:我可以手動創建label.fxml,然後手動調整borderpane.fxml爲包括label.fxml。然後我可以使用SceneBuilder加載borderpane.fxml文件,沒有任何問題。然而,當我現在改變標籤的文本,並選擇「保存」,而不是label.fxml被修改,而是將borderpane.fxml被修改如下:

# borderpane.fxml 
<fx:include source="label.fxml" text="the new label text" /> 

新的標籤文本應寫入label.fxml,不borderpane.fxml,目前正在做什麼。

  • 我做錯了什麼?

  • SceneBuilder不打算與fx結合使用:include?

  • 我想單獨的控制器爲我的GUI部分,我認爲這是相當邏輯/正常,所以這個實際的使用場景有希望以某種方式支持SceneBuilder?

回答

1

我不知道任何使用場景構建器向嵌入式FXML控件添加節點的方法。

但是,您可以使用Java代碼執行此操作。如果您的borderpane.fxml使用名爲#setCentre的方法定義了一個控制器來添加節點,那麼您可以在borderpane.fxml的父控制器中加載label.fxml,並使用您定義的方法添加標籤。

雖然有一個問題,你給一個簡化的例子,或者你是否真的爲標籤和邊框創建FXML文件?如果是這樣,那麼我認爲這實際上會使您的程序更復雜,而不僅僅是將控件添加到更大的控件。

6

看來Scene Builder 2解決了你提到的問題。

首先(已解決)問題:根節點不一定是Pane。例如,它可以是一個Label

二(解決)問題:菜單File > Include > FXML...可以用來包括外部FXML文件。無法編輯包含的文件。無論如何,右鍵單擊文檔視圖中的節點將顯示「編輯包含文件」菜單項,該菜單項打開該文件的另一個「場景生成器」窗口。

總之,場景構建器2正確處理fx:include元素

+0

不錯的解釋,但有一個問題:如果您包含fxml文件,您不能將它拖入場景構建器中,以便將其放到應用程序中的任何位置! – SlimenTN 2015-07-18 15:15:26