在 JavaFX 中分组对象?
Grouping objects in JavaFX?
所以我目前正在为 Connect4 游戏制作 JavaFX GUI(使用 SceneBuilder),我想知道是否有办法将 'group' 个对象放在一起,以便我可以对所有对象执行操作一起?
我的意思的例子:
- 我有 7 个按钮用于列 (colButton1-7),我想一次禁用所有按钮。
- 我使用椭圆作为计数器 (counter1-40) 并且想将它们的颜色全部更改为白色。
我四处寻找但没有找到任何东西。我知道如何为单个对象执行这两项操作,但想不出一种方法可以轻松地将更改同时应用于所有对象。任何帮助将不胜感激:)
没有对同一组的所有成员执行单一操作的分组机制。相反,您可以用一个 group/container 来保存所有控件并对每个成员应用相同的操作。
例如,假设我有一个包含 Buttons
的 VBox
,我想 禁用 它们。
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 ;
}
所以我目前正在为 Connect4 游戏制作 JavaFX GUI(使用 SceneBuilder),我想知道是否有办法将 'group' 个对象放在一起,以便我可以对所有对象执行操作一起?
我的意思的例子:
- 我有 7 个按钮用于列 (colButton1-7),我想一次禁用所有按钮。
- 我使用椭圆作为计数器 (counter1-40) 并且想将它们的颜色全部更改为白色。
我四处寻找但没有找到任何东西。我知道如何为单个对象执行这两项操作,但想不出一种方法可以轻松地将更改同时应用于所有对象。任何帮助将不胜感激:)
没有对同一组的所有成员执行单一操作的分组机制。相反,您可以用一个 group/container 来保存所有控件并对每个成员应用相同的操作。
例如,假设我有一个包含 Buttons
的 VBox
,我想 禁用 它们。
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 ;
}