在JavaFX中分组对象?

时间:2015-03-15 14:02:52

标签: java user-interface javafx scenebuilder ellipse

所以我现在正在为Connect4游戏制作一个JavaFX GUI(使用SceneBuilder),我想知道是否有一种方法来组织'对象一起使我可以对所有这些对象一起执行操作?

我的意思是:

  • 我有7个列的按钮(colButton1-7),我想一次禁用所有这些按钮。
  • 我使用Ellipses作为计数器(counter1-40),并希望将所有颜色的颜色更改为白色。

我四处寻找但却找不到任何东西。我知道如何为单个对象做两件事,但是不能想到一种方法可以同时轻松地将更改应用到所有对象。任何帮助将不胜感激:)

2 个答案:

答案 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 ;
}