[英]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.