【问题标题】:Create multiple exact FXML objects in JavaFX在 JavaFX 中创建多个精确的 FXML 对象
【发布时间】:2022-11-13 03:12:56
【问题描述】:

我想在窗口内创建多个 fxml 对象,使用一次 fxml 中的代码。但它们不止一次出现。 这是我的控制器代码:

public class HelloController {
    @FXML
    private AnchorPane plot = new AnchorPane();

    @FXML
    void AddPlotBlock(ActionEvent event) {
        this.plot.setMinHeight(110.0D);
        this.plot.setMinWidth(250.0D);
        this.plot.setStyle("-fx-background-color: grey");
    }

和 FXML:

<AnchorPane maxHeight="-1.0" maxWidth="-1.0" prefHeight="-1.0" prefWidth="-1.0" VBox.vgrow="ALWAYS" style="-fx-background-color: #301934;">
        <children>
            <AnchorPane fx:id="plot"/>
        </children>
</AnchorPane>

【问题讨论】:

  • 目前还不清楚你在这里做什么。 FXML和你描述的有什么关系?如果您想在 addPlotBlock() 方法中添加新块,则该方法应创建一个新的 AnchorPane(直接在代码中或通过加载 FXML)。这些应该添加到哪个容器(FXML 中定义的根AnchorPane,FXML 中定义的称为plot 的单个子AnchorPane,或其他)?它是总是初始化注释 @FXML 的内容不正确。
  • 这听起来像是您需要用代码而不是 FXML 来做的事情。
  • 另外,我不确定您是否将事物布置在网格中。如果你想看看GridPane 和/或TilePane
  • @James_D首先我想用root创建AnchorPane,但我不知道如何显示我的小部件。如果我只是声明锚窗格,它不会显示在屏幕上,所以我发现如果我在 FXML 中声明对象,我可以显示我的小部件及其工作,但仅适用于一个小部件而不是成倍增加,所以如果你能告诉如何显示控制器类中的小部件。我知道如果在应用程序类中创建循环它可以工作,但对我来说它在控制器中不起作用。

标签: java javafx fxml


【解决方案1】:

好的,我找到了解决方法。 为此,您需要更改 FXML 主文件中的 id,而不是在子文件中,而是在窗格(我的 AnchorPane)中,然后在控制器中使用准确的名称制作 AnchorPane。 然后您可以初始化您的块或控制器内的任何东西并将其添加到窗格中。 这是我的解决方案。

控制器 >

plots.getChildren().add(card); // plots is id

上面的命令在按钮内点击。

@FXML
private AnchorPane plot = new AnchorPane();

@FXML
public AnchorPane plots;

情节是对象。你可以放置无限的物体(如果你有记忆)

plots 是锚窗格的 id。

FXML 锚窗格

<AnchorPane fx:id="plots" maxHeight="-1.0" maxWidth="-1.0" prefHeight="-1.0" prefWidth="-1.0" VBox.vgrow="ALWAYS" style="-fx-background-color: #301934;" />

所以锚窗格有 id 并且您将子参数(绘图)添加到主窗格(绘图)。 感谢您的评论和规则。

【讨论】:

  • 当心:你一定不实例化一个用 @fxml 注释的字段(又名:意味着被注入) - 在这里你可以简单地删除注释,如果它不是由 fxml 创建的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-15
  • 2015-10-17
  • 2018-07-05
相关资源
最近更新 更多