我正在研究一个简单的BeatBox,根据所选的复选框,会播放不同的声音。
该程序应该有256个复选框,显示在16x16网格上。因此,当我通过直接代码(即没有fxml或场景构建器)构建GUI时,我可以轻松地创建一个简单的循环来创建256个复选框,将它们添加到列表中以便以后可以使用它们,并将它们添加到网格。
我试图改变这种方法,并使用场景构建器或直接在fxml文件上编码,但我无法找到一种方法,我甚至不知道这是否可能。试图找出这一点,我遇到了这个疑问: - 有没有办法创建一个类型的小部件列表,填充了大量的组件(对于我给出的例子,一个包含256个CheckBoxes的列表),通过fxml或场景构建器,然后引用我的Controller类上的列表?
我真的不喜欢在场景构建器上拖放256个复选框的想法,甚至在fxml上制作256个标签。而且我认为该功能可能对许多其他情况有用。所以如果可能,我会喜欢它的帮助。
提前致谢!
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>