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。
当我需要获取 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。