gpt4 book ai didi

java - 创建自定义控件以包含其他自定义控件

转载 作者:行者123 更新时间:2023-12-01 21:09:05 25 4
gpt4 key购买 nike

我正在创建一个应用程序,它应该引导用户完成以下屏幕截图中所示的步骤:

enter image description here

  <Step fx:id="selectConnectionStep" source="SelectConnection" stepLabel="Step 1 : Select a Connection" />
<Step fx:id="selectSObjectStep" source="SelectSObject" stepLabel="Step 2 : Select an SObject" />
<Step fx:id="selectActionStep" stepLabel="Step 3 : Select an Action">
<VBox GridPane.columnSpan="2" GridPane.rowIndex="1">
<Action actionLabel="test" onAction="#test" />
<GridPane.margin>
<Insets bottom="15.0" left="15.0" right="10.0" top="10.0" />
</GridPane.margin>
</VBox>
</Step>

在应用程序中,我有更多场景配置为以这种方式工作,因此我想以易于维护的方式设计它。

我创建了名为“Step”的自定义控件(它基本上扩展了 GridPane)

每个“步骤”都有标题、loadingIcon 和内部组件。

在前两个步骤中,我使用创建的“source”属性加载内部组件。我只是给出组件的 FXML 文件的名称。在代码中,我只是加载 FXML 并将组件放在正确的位置。然而,正如在第三步中可以看到的,我尝试将内部组件填充为步骤子级。可以看出,这是有效的,但是我希望 Step 将其子级注入(inject)到正确的位置,而不指定任何将其放置在网格中的位置的细节。

<Step fx:id="selectActionStep" stepLabel="Step 3 : Select an Action">
<VBox>
<Action actionLabel="test" onAction="#test" />
</VBox>
</Step>

如果我不指定任何详细信息,该组件将进入左上角的 GridPane 内部。

问题是自定义控件如何操作其 FXML 子元素?我扩展 GridPane 也可以吗?

谢谢:)

最佳答案

执行此操作的最佳方法是在添加“标准”元素(例如,

private static final Insets MARGIN = new Insets(10, 10, 15, 15);

...

// add standard elements...

getChildren().addListener((ListChangeListener.Change<? extends Node> c) -> {
while (c.next()) {
if (c.wasAdded()) {
for (Node n : c.getAddedSubList()) {
GridPane.setColumnSpan(2);
GridPane.setRowIndex(1);
GridPane.setMargin(MARGIN);
}
}
}
});

关于java - 创建自定义控件以包含其他自定义控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41608498/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com