VBox 中的按钮重叠
Buttons in VBox overlap
我正在尝试向包含在 BoarderPane
中的 VBox
添加按钮,但它们似乎重叠。
我的 fxml 文件中的 VBox
片段是
<VBox fx:id="leftPlayerPlayArea" alignment="CENTER" minHeight="0.0" minWidth="0.0" prefWidth="120.0" BorderPane.alignment="CENTER_LEFT">
<BorderPane.margin>
<Insets left="30.0" />
</BorderPane.margin>
<opaqueInsets>
<Insets />
</opaqueInsets>
<padding>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</padding>
</VBox>
当我在控制器 class 中添加按钮时,按钮会很好地添加到我的 Hbox,但它们不会很好地添加到我的 Vbox。以下是图片:
VBox
HBox
最后是我创建这些按钮的方式:
private Button playerPromptButtonCreator(String buttonText, EventHandler<ActionEvent> event, int id) {
Button button = createBtn(buttonText);
button.setMinWidth(BTN_MAX_WIDTH);
button.setMinHeight(BTN_MAX_HEIGHT);
button.setOnAction(event);
if (playerPositions.get(id) == PlayerPosition.LEFT){
button.setRotate(90);
}
if (playerPositions.get(id) == PlayerPosition.RIGHT)
{
button.setRotate(270);
}
Platform.runLater(new Runnable() { //and create the button if it doesnt exist if it doesnt
@Override
public void run() {
//THIS IS MY LINE
playerPlayAreas.get(id).add(button);
}
});
return button;
}
我也尝试 setSpacing()
属性 VBox
但没有效果。
要确定父布局中节点的大小,JavaFX 使用 untransformed 节点的边界,即它不考虑旋转并使用呈现为宽度的大小作为高度。
您可以通过将 Button
包装在 Group
中来解决此问题,但这需要您编辑方法的签名或修改调用方法:
Button button1 = new Button("Yes");
Button button2 = new Button("No");
button1.setRotate(90);
button2.setRotate(90);
VBox layout = new VBox(new Group(button1), new Group(button2));
我正在尝试向包含在 BoarderPane
中的 VBox
添加按钮,但它们似乎重叠。
我的 fxml 文件中的 VBox
片段是
<VBox fx:id="leftPlayerPlayArea" alignment="CENTER" minHeight="0.0" minWidth="0.0" prefWidth="120.0" BorderPane.alignment="CENTER_LEFT">
<BorderPane.margin>
<Insets left="30.0" />
</BorderPane.margin>
<opaqueInsets>
<Insets />
</opaqueInsets>
<padding>
<Insets bottom="5.0" left="5.0" right="5.0" top="5.0" />
</padding>
</VBox>
当我在控制器 class 中添加按钮时,按钮会很好地添加到我的 Hbox,但它们不会很好地添加到我的 Vbox。以下是图片:
VBox
HBox
最后是我创建这些按钮的方式:
private Button playerPromptButtonCreator(String buttonText, EventHandler<ActionEvent> event, int id) {
Button button = createBtn(buttonText);
button.setMinWidth(BTN_MAX_WIDTH);
button.setMinHeight(BTN_MAX_HEIGHT);
button.setOnAction(event);
if (playerPositions.get(id) == PlayerPosition.LEFT){
button.setRotate(90);
}
if (playerPositions.get(id) == PlayerPosition.RIGHT)
{
button.setRotate(270);
}
Platform.runLater(new Runnable() { //and create the button if it doesnt exist if it doesnt
@Override
public void run() {
//THIS IS MY LINE
playerPlayAreas.get(id).add(button);
}
});
return button;
}
我也尝试 setSpacing()
属性 VBox
但没有效果。
要确定父布局中节点的大小,JavaFX 使用 untransformed 节点的边界,即它不考虑旋转并使用呈现为宽度的大小作为高度。
您可以通过将 Button
包装在 Group
中来解决此问题,但这需要您编辑方法的签名或修改调用方法:
Button button1 = new Button("Yes");
Button button2 = new Button("No");
button1.setRotate(90);
button2.setRotate(90);
VBox layout = new VBox(new Group(button1), new Group(button2));