【问题标题】:Adding space between buttons in VBox在 VBox 中的按钮之间添加空格
【发布时间】:2013-08-24 04:31:31
【问题描述】:

我有一组按钮:

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

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

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

我很高兴有任何想法。 :)

【问题讨论】:

标签: javafx-2 javafx


【解决方案1】:

VBox 支持间距:

VBox menuButtons = new VBox(5);

menuButtons.setSpacing(5);

【讨论】:

  • Thx... :$ 我认为这将是其中的元素数量。 Nerver 坚持认为这会如此简单。
  • 顺便说一句:在 FXML 中它看起来像这样:<VBox spacing="5">...</VBox>
  • 对这个直截了当的问题的投票数量确实让这个类的 API 有了正确的认识:)
  • @codepleb FXML 版本正是我想要的。非常感谢!
【解决方案2】:

只需调用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 没有给出可以直接在构造函数中设置的解决方案,我会选择这个。
  • Builder 在 javafx 8 中被贬值,你应该使用标准的方式来创建对象并设置它的间距。见this post on oracle forum
  • @FloC 我相信你。但我使用的是 Java 1.7 update 21。不过,感谢您指出这一点。
【解决方案3】:

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

<VBox spacing="5" />

【讨论】:

    【解决方案4】:

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

    但是,您也可以使用setMargin(),它不是用于窗格(或您所说的框),而是用于单个Nodes。 setPadding() 方法适用于窗格本身。事实上,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() 是您需要的,如果您需要在节点周围 margins(duh),您可以确定每边的距离,因为 setSpacing() 方法只放置空格 在节点之间,而不是在节点和窗口边缘之间。

    【讨论】:

    • 好帖子,但我认为HBox.setMargin(Node, Insets)pane.setMargin(Node, Insets) 更简洁,因为setMargin 是一个静态函数。我不知道这两种方法是否会产生实际影响。
    猜你喜欢
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 2022-01-19
    相关资源
    最近更新 更多