VBox 中的节点不具有相同的宽度

Nodes in VBox don't have the same width

我使用 VBox 来提供 3 个输入字段。
它们都是这样设置的:

tf = new TextField();
tf.setPrefWidth(Double.MAX_VALUE);
sp = new Spinner<Integer>(0, 3, 1);
sp.setPrefWidth(Double.MAX_VALUE);
dp = new DatePicker(LocalDate.now());
dp.setPrefWidth(Double.MAX_VALUE);
vbox.getChildren().addAll(tf, sp, dp);

TextFieldDatePicker的宽度相等。然而 Spinner 稍短。
我怎样才能得到相同的大小?

注意:使用 .setMinWidth(Control.USE_PREF_SIZE); 会导致 VBox 的父节点(扩展 StackPane)出现布局问题。


解释:带边框的 Component extends StackPane,只能容纳一个 node。本例中的 "node" 是一个 VBox,它包含 3 个输入字段和按钮。

在各个控件上使用 setMaxWidth 并在 VBox 本身上调用 setFillWidth(true)

tf = new TextField();
tf.setMaxWidth(Double.MAX_VALUE);
sp = new Spinner<Integer>(0, 3, 1);
sp.setMaxWidth(Double.MAX_VALUE);
dp = new DatePicker(LocalDate.now());
dp.setMaxWidth(Double.MAX_VALUE);

vBox.setFillWidth(true);

vbox.getChildren().addAll(tf, sp, dp);