簡體   English   中英

如何添加 <fx:root> 組件作為FXML中的子組件?

[英]How can I add a <fx:root> component as a child in FXML?

我有一個擴展AnchorPane的自定義組件,如下所示:

public class CustomAnchorPane extends AnchorPane { }

我想在BorderPane加載BorderPane 如果我想加載常規的AnchorPane ,我將這樣做:(為簡潔起見,我刪除了一些行)

<BorderPane fx:id="borderpane" ... fx:controller="main.java.Controller">
    <center>
      <AnchorPane fx:id="anchorpane" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
    </center>
 </BorderPane>

我了解<fx:root>構造用於可重用/自定義組件。 我不知道如何將其設置為BorderPane的子級,因為我相信它必須是FXML文件的根。 因此,以下內容將引發錯誤:

<BorderPane fx:id="borderpane" ... fx:controller="main.java.Controller">
    <center>
       <fx:root fx:id="custom_anchorpane" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
    </center>
</BorderPane>

正確的方法是什么?

提前致謝。

<fx:root>僅作為fxml的根有意義,因為這是使用從fxml創建的對象的父對象的唯一位置,但未在fxml本身中定義。

它僅使FXMLLoader使用通過setRoot傳遞的對象,而不是為此標簽本身創建元素。

假設您已經正確實現了自定義Node ,則可以像使用其他任何元素一樣使用它:

<BorderPane fx:id="borderpane" ... fx:controller="main.java.Controller">
    <center>
       <CustomAnchorPane fx:id="custom_anchorpane" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
    </center>
</BorderPane>

請注意,這需要在文件開頭適當地導入處理指令,並且該類需要提供不帶參數的public構造函數。

如果您不是自己創建自定義類,而是擁有要在某個播放器中使用的fxml文件,則還可以使用fx:include

<BorderPane fx:id="borderpane" ... fx:controller="main.java.Controller">
    <center>
       <fx:include source="custom_anchorpane.fxml"/>
    </center>
</BorderPane>

暫無
暫無

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

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