所以我现在正在为Connect4游戏制作一个JavaFX GUI(使用SceneBuilder),我想知道是否有一种方法来组织'对象一起使我可以对所有这些对象一起执行操作?
我的意思是:
我四处寻找但却找不到任何东西。我知道如何为单个对象做两件事,但是不能想到一种方法可以同时轻松地将更改应用到所有对象。任何帮助将不胜感激:)
答案 0 :(得分:3)
没有分组机制对同一组的所有成员执行单个操作。相反,您可以使用单个组/容器来保存所有控件,并对每个成员应用相同的操作。
例如,假设我有VBox
包含Buttons
,我想禁用所有内容。
for(Node node:vBox.getChildren()) {
node.setDisable(true);
}
或,设置样式
for(Node node:vBox.getChildren()) {
node.setStyle("-fx-something");
}
答案 1 :(得分:2)
对于禁用,如果禁用节点,则其所有子节点都将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
,您应该使用外部样式表。如果更改父级的样式类,则使用适当的外部样式表可以一次更改所有子项的样式。
E.g。
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");
外部样式表:
.counter-pane > .counter {
-fx-fill: white ;
}
.warning > .counter {
-fx-fill : red ;
}