相同大小的JavaFX按钮

JavaFX buttons with same size

我有这些具有不同大小的按钮:

图片

如何使所有按钮的尺寸相同?


这取决于按钮所在的布局。例如,如果将所有按钮添加到GridPane或BorderPane中,则必须指定每个按钮的宽度以对应于某些变量。在下面的示例中,我将所有按钮包装在VBox内,设置VBox首选项宽度并将所有按钮的最小宽度绑起来。

1
2
3
4
5
6
7
8
9
10
VBox vBox = new VBox();
vBox.setPrefWidth(100);

Button btn1 = new Button("Short");
Button btn2 = new Button("Super Long Button");

btn1.setMinWidth(vBox.getPrefWidth());
btn2.setMinWidth(vBox.getPrefWidth());

vBox.getChildren().addAll(btn1, btn2);

还值得一提的是,有两种方法可以指定按钮的大小。您可以在Java代码中进行操作,也可以在javafx .fxml文件中进行指定。上面的方法是Java代码实现的示例。

您还可以松开按钮的最大尺寸,使其增大以填充可用空间(与大多数节点不同,默认情况下,按钮节点的最大尺寸被限制为首选大小,因此通常不会增大以填充可用空间)。甲骨文的"调整节点大小和对齐技巧"教程对此进行了更详细的说明。

1
2
3
4
5
6
7
8
9
VBox vBox = new VBox();

Button btn1 = new Button("Short");
Button btn2 = new Button("Super Long Button");

btn1.setMaxWidth(Double.MAX_VALUE);
btn2.setMaxWidth(Double.MAX_VALUE);

vBox.getChildren().addAll(btn1, btn2);


使用CSS您可以覆盖所有按钮的首选宽度,例如

1
2
3
.button {
    -fx-pref-width: 200px;
}

或为某些按钮组创建自己的样式类,然后将样式添加到按钮,例如:
CSS:

1
2
3
4
.my-special-button {
    -fx-pref-height: 28px;
    -fx-pref-width: 200px;
}

然后使用以下任一方法将样式设置为您的按钮
fxml:

1
styleClass="my-special-button"

或用Java

1
myButton.getStyleClass().add("my-special-button");