2016-12-06 7 views
1

У меня есть пользовательский компонент, который расширяет AnchorPane, как:Как добавить компонент <fx:root> в качестве дочернего элемента в FXML?

public class CustomAnchorPane extends AnchorPane { } 

Я хотел бы, чтобы загрузить это в 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> 

Каков правильный способ сделать это?

Заранее спасибо.

ответ

3

<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 файл, который вы хотите использовать в определенном Playe, вы можете также использовать fx:include:

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

Ahh, я не понял, вы могли бы просто импортируйте пользовательский компонент и используйте его! Это намного проще и мощнее, спасибо. – user3668541

 Смежные вопросы

  • Нет связанных вопросов^_^