在VBox中添加按钮之间的间距

50

我有一组按钮:

VBox menuButtons = new VBox();
menuButtons.getChildren().addAll(addButton, editButton, exitButton);

我想在这些按钮之间添加一些间距,但不使用CSS样式表。 我认为应该有一种方法可以做到这一点。

setPadding(); 用于VBox中的Buttons。
setMargin(); 应该用于VBox本身。 但是我没有找到在按钮之间创建间距的方法。

欢迎任何想法。 :)


这个有帮助吗?https://dev59.com/k3E85IYBdhLWcg3w43wX - Andy
1
@Andy:不,我目前正在使用JavaFX而不是Swing,但还是谢谢! :) - codepleb
5个回答

85

VBox自带外边距:

VBox menuButtons = new VBox(5);
或者
menuButtons.setSpacing(5);

1
谢谢...:$ 我以为这将是其中元素的数量。从未想过这会如此简单。 - codepleb
11
顺便说一下,在FXML中它看起来是这样的:<VBox spacing="5">...</VBox> - codepleb
2
这个简单问题的投票数量确实让该类API变得更有意义 :) - Sergey Grinev
1
@codepleb,FXML版本正是我在寻找的。非常感谢! - Zac

20

只需调用setSpacing方法并传递一些值。 以HBox为例(对于VBox也是相同的):


只需调用setSpacing方法并传递一些值。以HBox为例(对于VBox也是相同的):
import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.HBox;
import javafx.scene.layout.HBoxBuilder;
import javafx.stage.Stage;

public class SpacingDemo extends Application {
    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage stage) {
        stage.setTitle("Spacing demo");

        Button btnSave = new Button("Save");
        Button btnDelete = new Button("Delete");
        HBox hBox = HBoxBuilder.create()
                .spacing(30.0) //In case you are using HBoxBuilder
                .padding(new Insets(5, 5, 5, 5))
                .children(btnSave, btnDelete)
                .build();

        hBox.setSpacing(30.0); //In your case

        stage.setScene(new Scene(hBox, 320, 240));
        stage.show();
    }
}

这是它的外观:

没有间距:

在此输入图片描述

有间距:

在此输入图片描述


好答案!非常感谢! :) 如果Sergey Grinev没有给出一个可以直接在构造函数中设置的解决方案,我会选择这个。 - codepleb
2
在JavaFX 8中,构建器已经被弃用,您应该使用标准方式来创建对象并设置其间距。请参阅Oracle论坛上的此帖子 - Flo C
@FloC 我相信你。但是我正在使用Java 1.7更新21版。不过,还是谢谢你指出来。 - Branislav Lazic

14

如果您正在使用FXML,请使用spacing属性:

<VBox spacing="5" />

9

正如其他人提到的,您可以使用setSpacing()

然而,您也可以使用setMargin(),它不是针对面板(或者您所说的框),而是针对单个NodesetPadding()方法是针对面板本身的。实际上,setMargin()需要以节点作为参数,因此您可以猜测它的用途。

例如:

HBox pane = new HBox();
Button buttonOK = new Button("OK");
Button buttonCancel = new Button("Cancel");
/************************************************/
pane.setMargin(buttonOK, new Insets(0, 10, 0, 0)); //This is where you should be looking at.
/************************************************/
pane.setPadding(new Insets(25));
pane.getChildren().addAll(buttonOK, buttonCancel);
Scene scene = new Scene(pane);
primaryStage.setTitle("Stage Title");
primaryStage.setScene(scene);
primaryStage.show();

如果你用下面这行代码替换原来的那一行,也可以得到相同的结果:
pane.setSpacing(10);

如果您有几个节点需要间距,那么使用setSpacing()方法会更方便,因为您只需要为每个节点调用setMargin()方法将是荒谬的。然而,如果您需要在节点周围设置可以确定两侧边距的边距,则需要使用setMargin()方法,因为setSpacing()方法仅在节点之间放置空格,而不在节点和窗口边缘之间放置空格。

2
不错的帖子,但我认为使用HBox.setMargin(Node, Insets)比使用pane.setMargin(Node, Insets)更加简洁,因为setMargin是一个静态函数。我不知道两种方法是否有实际区别。 - Max

3

通过CSS也可以实现与setSpacing方法相同的效果:

VBox {
    -fx-spacing: 8;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接