我已经搜索并看到了其他一些与此类似的问题,但他们并没有真正回答我的问题。我有一组看起来一样的按钮,目前我正在改变每个按钮的样式,如下所示:
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的属性。有更好的方法可以做到这一点,还是我应该单独设置它们?
答案 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
的类并在构造函数中设置属性。