通过JavaFX中的fxml或Scene构建器在场景上动态添加小部件

问题描述 投票:0回答:1

我正在研究一个简单的BeatBox,根据所选的复选框,会播放不同的声音。

该程序应该有256个复选框,显示在16x16网格上。因此,当我通过直接代码(即没有fxml或场景构建器)构建GUI时,我可以轻松地创建一个简单的循环来创建256个复选框,将它们添加到列表中以便以后可以使用它们,并将它们添加到网格。

我试图改变这种方法,并使用场景构建器或直接在fxml文件上编码,但我无法找到一种方法,我甚至不知道这是否可能。试图找出这一点,我遇到了这个疑问: - 有没有办法创建一个类型的小部件列表,填充了大量的组件(对于我给出的例子,一个包含256个CheckBoxes的列表),通过fxml或场景构建器,然后引用我的Controller类上的列表?

我真的不喜欢在场景构建器上拖放256个复选框的想法,甚至在fxml上制作256个标签。而且我认为该功能可能对许多其他情况有用。所以如果可能,我会喜欢它的帮助。

提前致谢!

java javafx fxml scenebuilder scene
1个回答
1
投票

FXML格式没有提供在循环中声明元素的方法。由于Scene Builder只是FXML文件的WYSIWYG编辑器,它也不提供此功能,也不提供声明和配置256个元素的快捷方式(例如通过对话框等)。这是在代码中添加节点是正确解决方案的情况之一。

为此,您需要将FXML文件链接到控制器。从那里你可以在CheckBox方法中创建所有256个qazxswwies。这个方法来自initialize接口,但是因为JavaFX 8你不再需要实际实现接口。相反,你只需要声明一个名为Initializable的no-arg方法(参见initialize)并使用this注释它,如果非@FXML

这是一个小例子:

FXML文件

public

调节器

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.layout.GridPane?>
<?import javafx.scene.layout.HBox?>

<!-- replace with your root -->
<HBox xmlns="http://javafx.com/javafx/11.0.2" xmlns:fx="http://javafx.com/fxml/1"
      fx:controller="com.example.Controller">

    <GridPane fx:id="grid"/>

    <!-- other elements... -->

</HBox>
© www.soinside.com 2019 - 2024. All rights reserved.