簡體   English   中英

在 javafx 中加載多個 fxml

[英]Loading multiple fxml in javafx

我一直在尋找一段時間,但我無法得到我想做的事情。 我一直在使用 javafx 框架在這個線程“ 在同一場景中加載新的 fxml ”中切換 javafx 中的 fxml,並取得了一些成功。 我的意思是,我有一個主窗口,這個窗口有兩個不同的區域,主區域和內容區域。

MAIN 區域在整個應用程序中將保持不變,但 CONTENT 區域將不斷變化。 我的 MAIN 區域只有一個工具欄,根據您單擊工具欄中的哪個按鈕,CONTENT 區域中的 fxml(和行為)會發生變化。

我已經有了這種行為,並且使用該框架就像一種魅力。

問題是,我希望我所有的 CONTENT 區域也可以有自己的 MAIN 區域,也可以有自己的 CONTENT 區域。 並且根據您在第二個主要區域中所做的事情,第二個內容區域中的 fxml 和行為也會發生變化。

我不知道我使用的框架是否足夠,我是否能夠使用它獲得我想要做的事情。

您知道另一個可以幫助我獲得該功能的不同框架嗎?

提前非常感謝!

您加載的每個.fxml都可以有自己的控制器。 每個控制器都可以像主控制器一樣具有自定義操作和加載代碼。

基本上,JavaFX 是模塊化的。 如果您的主窗格中的某些內容是可能的,那么它的所有子窗格中也是可能的。

通常,在基於 UI 的框架中,保持控制器層次結構反映其各自組件的層次結構是一個明智的想法。 如果要獲取子元素的子控制器(例如,為了將引用傳遞給父控制器),則不能依賴FXML.load()快捷方式,必須使用較長的語法的:

FXMLLoader loader = new FXMLLoader(getClass().getResource("your.fxml"));
YourPaneType pane = loader.load();
YourControllerType controller = loader.getController();

您可以使用fx:include加載所有內容,並根據您的需要使它們可見。

<AnchorPane fx:id="root">
    <children>

        <!-- initial content -->
        <fx:include fx:id="content1" source="content1.fxml" />

        <!-- other content we want to pre-load -->
        <StackPane visible="false" managed="false">
            <children>
                <fx:include fx:id="content2" source="content2.fxml" />
                <fx:include fx:id="content3" source="content3.fxml" />
            </children>
        </StackPane>

    </children>
</AnchorPane>

並在控制器中

@FXML
Pane root;

@FXML
Pane content1;

@FXML
Pane content2;

@FXML
Pane content3;

@FXML
NestedContentController content1Controller;

@FXML
NestedContentController content2Controller;

@FXML
NestedContentController content3Controller;

public void showContent1() {
    root.getChildren().setAll(content1);
}

public void showContent2() {
    root.getChildren().setAll(content2);
}


public void showContent3() {
    root.getChildren().setAll(content3);
}

(最初隱藏的內容也可以在<fx:define>元素中的對象層次結構之外定義,但是 SceneBuilder 不提供顯示包含文件的選項。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM