一次设置多个按钮[Javafx]

时间:2015-03-24 17:10:37

标签: java javafx

我已经搜索并看到了其他一些与此类似的问题,但他们并没有真正回答我的问题。我有一组看起来一样的按钮,目前我正在改变每个按钮的样式,如下所示:

button1.setBackground(background);
button1.setPrefHeight(height);
button1.setPrefWidth(width);

button2.setBackground(background);
button2.setPrefHeight(height);
button2.setPrefWidth(width);

等等。我尝试了以下无济于事:

templateButton.setBackground(background);
templateButton.setPrefHeight(height);
templateButton.setPrefWidth(width);
button1 = templateButton;
button2 = templateButton;
button3 = templateButton;

然后我得到一个错误,说明“重复的孩子们添加了”,我假设意味着按钮1/2/3都指向templateButton某种方式,而不是仅仅继承templateButton的属性。有更好的方法可以做到这一点,还是我应该单独设置它们?

2 个答案:

答案 0 :(得分:2)

在JavaFX中将样式应用于控件的推荐方法是使用CSS,最好是在外部样式表中。除了在布局代码和样式代码之间提供良好的分离外,这还允许您一次设置多个场景图节点的样式。

要应用于应用程序中的所有按钮,您可以使用

.button {
    -fx-background-color: ... ;
    -fx-pref-height: ... ;
    -fx-pref-width: ... ;
}

要应用于选定的按钮组,您可以为这些按钮指定样式类:

Button button1 = new Button(...);
Button button2 = new Button(...);
Button button3 = new Button(...);

Stream.of(button1, button2, button3).forEach(button -> 
    button.getStyleClass().add("my-style"));

然后css文件中的选择器变为

.my-style {
    -fx-background-color: ... ;
    /* etc */
}

或者,如果所有按钮都在特定的布局窗格中,您可以选择布局窗格中的所有按钮:

Button button1 = new Button(...);
Button button2 = new Button(...);
Button button3 = new Button(...);

VBox buttons = new VBox(button1, button2, button3);
buttons.getStyleClass().add("button-container");

然后CSS选择器

.button-container > .button {
    /* styles.... */
}

答案 1 :(得分:-1)

只需使用循环:

for (Button b : Arrays.asList(button1, button2, button3)) {
    b.setBackground(background);
    b.setPrefHeight(height);
    b.setPrefWidth(width);
}

或者创建自己的扩展Button的类并在构造函数中设置属性。