无法使用Java FX中的Included Components自定义视图

时间:2016-12-25 10:43:09

标签: javafx javafx-8 scenebuilder

我创建了一个子组件,并使用fx:include将其包含在另一个父组件中。

父母和孩子的控制器很好地实例化 但是,在父FXML中,我有GridPane作为子fxml的父级。子fxml默认添加在(0,0)。当我想使用SceneBuilder更改视图并将子组件放在不同的行/列索引中时,我无法将组件拖入其中。

我只能组织VBox内部不符合我需求的组件。

家长FXML:

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.AnchorPane?>
<fx:root maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" type="AnchorPane" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1">
   <children>
      <fx:include source="test.fxml" />
   </children>
</fx:root>

儿童FXML:

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.Label?>
<Label text="Label" xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1" />

请尝试查看您是否可以在父视图中播放子视图。例如,我无法将子项置于某个任意位置的网格视图中。

1 个答案:

答案 0 :(得分:1)

在与OP讨论之后,我发现OP实际上想在父fxml中使用GridPane,并且他希望将包含的fxml放在GridPane的特定行和列索引处。默认情况下,SceneBuilder将FXML添加到(0,0)。

SceneBuilder目前不支持此功能。

然而,您可以直接编辑FXML并更改其中的rowIndex和columnIndex。

<强> Parent.fxml

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.GridPane?>

<GridPane xmlns="http://javafx.com/javafx/8.0.111" xmlns:fx="http://javafx.com/fxml/1">
    <children>
        <fx:include source="child.fxml" GridPane.rowIndex="1" GridPane.columnIndex="1" />
    </children>
</GridPane>

在SceneBuilder中包含FXML的步骤:

  • 选择GridPane作为根布局

Choose GridPane as the root layout

  • 转到“包含FXML”

Include FXML

  • 选择FXML以包含

Choose FXML to include

  • FXML已添加到GridPane

FXML added to GridPane