JavaFX 动态地将标签添加到窗格,在 fxml 文件中定义

Posted

技术标签:

【中文标题】JavaFX 动态地将标签添加到窗格,在 fxml 文件中定义【英文标题】:JavaFX dynamycly add labels to pane, defined in fxml file 【发布时间】:2016-06-03 13:21:57 【问题描述】:

我的 fxml 文件中有 BorderPane。而且我需要从我的控制器类中的代码中将标签添加到它的中心。据我了解,我必须在 initialize() 方法中执行此操作,但我不知道如何实现这一点。

P.S. 我不想在 fxml 文件中静态添加它们,因为它们的数量每次都不同,可能是 5 或可能是 20。在这种情况下,我必须添加它们最大数量并使它们不可见。但我认为这不是最好的决定。

【问题讨论】:

你可能不得不在没有 fxml 的情况下这样做,它会容易得多。使用 fxml,这并非不可能(因为我不知道您有什么场景),但是您可以尝试将它们添加到像 ArrayList 这样的灵活集合中(添加您想要列出的任何标签,然后遍历数组列表添加任何标签存在于其中)。当然,可能有更好的方法来做到这一点,这是我一开始就想到的方法。 【参考方案1】:

您需要将您的控制器绑定到您的 FXML,然后创建一个将被调用的初始化方法。您需要使用 @FXML 注释对其进行注释。

您还需要使用@FXML 注释连接边框窗格。这里我假设它是 myBorderPane。

@FXML
private void initialize() 
    //Create the label
    Label myLabel = new Label("Will go in the Center Pane"); 
    myBorderPane.setCenter(myLabel);

显然,这只是将一个标签硬编码到您的窗格中。您可能需要在此处创建一些逻辑来生成您需要的内容。您还需要注意布局等。

希望这会为您指明正确的方向。

【讨论】:

但是,伙计,我已经尝试过这样的变体,但一无所获有我的代码:` public class Controller @FXML BorderPane pane; @FXML private void initialize() pane.setCenter(new Label("XYZ")); ` 如果您尝试过代码但它不起作用,您需要将它放在您的问题中。显示足够的代码(FXML、控制器和主类)来重现问题。 我发现我的错误 - 我没有将控制器作为窗格的参数添加到 fxml 文件。现在一切正常。

以上是关于JavaFX 动态地将标签添加到窗格,在 fxml 文件中定义的主要内容,如果未能解决你的问题,请参考以下文章

JavaFX 使用 fx:id 或 id 将节点动态添加到窗格

javafx动态地在新选项卡中打开一个新的fxml文件

在 JavaFX 中的窗格之间切换

JavaFX 动态添加按钮

JavaFX 在网格窗格中显示多个图像

JavaFX FXML 标签不更新其值