JavaFX 查找 ToggleGroup class 的名称

JavaFX lookup ToggleGroup class by it's name

当我需要获取 Button 时 class 我接下来会做:

Button B = (Button)scene.lookup("#ID");

如何查找 ToggleGroup class?

查找通常不是很可靠,正如您在问题中指出的那样,您不能使用它们来访问场景图中不是节点的元素(例如切换组)。通常,您应该将元素注入到控制器中。

如果您正在动态生成 FXML,或者由于某些其他原因无法创建控制器 class,您可以访问 FXML 加载程序的命名空间。这是一张地图,您可以使用它通过 FXML 中的 fx:id 属性查找对象。

所以如果你有一个 FXML 文件

<VBox>
    <fx:define>
        <ToggleGroup fx:id="myToggleGroup"/>
    </fx:define>
    <children>
        <RadioButton text="A" toggleGroup="$myToggleGroup"/>
        <RadioButton text="B" toggleGroup="$myToggleGroup"/>
        <RadioButton text="C" toggleGroup="$myToggleGroup"/>
    </children>
</VBox>

然后您可以使用

检索切换组
FXMLLoader loader = new FXMLLoader(fxmlURL);
Parent root = loader.load();
Map<String, Object> fxmlNamespace = loader.getNamespace();

ToggleGroup toggleGroup = (ToggleGroup) fxmlNamespace.get("myToggleGroup");

当然,您可以对场景图元素执行相同的操作。以这种方式做事而不是使用 CSS 查找有一个好处,因为一旦加载 FXML 文件,命名空间就会被完全填充。 (CSS 查找仅在应用 CSS 后有效。)

另外,由于namespace只是一个映射,你可以通过调用namespace.keySet()动态地找到fx:id,所以不需要事先知道可能定义了哪些 ID。