在 JavaFX 中分组对象?

Grouping objects in JavaFX?

所以我目前正在为 Connect4 游戏制作 JavaFX GUI(使用 SceneBuilder),我想知道是否有办法将 'group' 个对象放在一起,以便我可以对所有对象执行操作一起?

我的意思的例子:

我四处寻找但没有找到任何东西。我知道如何为单个对象执行这两项操作,但想不出一种方法可以轻松地将更改同时应用于所有对象。任何帮助将不胜感激:)

没有对同一组的所有成员执行单一操作的分组机制。相反,您可以用一个 group/container 来保存所有控件并对每个成员应用相同的操作。

例如,假设我有一个包含 ButtonsVBox,我想 禁用 它们。

for(Node node:vBox.getChildren()) {
    node.setDisable(true);
}

或者,设置样式

for(Node node:vBox.getChildren()) {
    node.setStyle("-fx-something");
}

对于禁用,如果禁用一个节点,那么它的所有子节点都将 disabled 设置为 true。所以你可以这样做:

VBox buttonHolder = new VBox();
Button button = new Button(...);
buttonHolder.getChildren().add(button);
// repeat as necessary...

buttonHolder.setDisable(true); // all buttons in the VBox will now be disbaled

对于样式属性,例如形状的 fill,您应该使用外部样式 sheet。如果您更改父项的样式 class,然后使用适当的外部样式 sheet 您可以一次性更改所有子项的样式。

例如

Pane counterPane = new Pane();
for (int i=0; i<numCounters; i++) {
    Ellipse counter = new Ellipse(...);
    counter.getStyleClass().add("counter");
    counterPane.getChildren().add(counter);
}

// ...

counterPane.getStyleClass().add("counter-pane"); // all counters white

// change to red:
counterPane.getStyleClass().remove("counter-pane");
counterPane.getStyleClass().add("warning");

外部样式sheet:

.counter-pane > .counter {
    -fx-fill: white ;
}

.warning > .counter {
    -fx-fill : red ;
}