如何在javafx中的菜单之间添加空格

Tom*_*omJ 0 javafx menu javafx-2

我正在尝试实现一个菜单.这是我的代码:

    Menu menuFile1 = new Menu("ADD");
    Menu menuFile2 = new Menu("EDIT");
    Menu menuFile3 = new Menu("VIEW");
    Menu menuFile4 = new Menu("HELP");
Run Code Online (Sandbox Code Playgroud)

如何在每个菜单之间放置一些空格(即ADD,EDIT,VIEW和HELP之间)?

jew*_*sea 6

回答

菜单周围的空间由填充控制(请参阅Region css指南).

例如:

menu.setStyle("-fx-padding: 5 10 8 10;");
Run Code Online (Sandbox Code Playgroud)

将菜单周围的填充设置为顶部5个像素,右侧10个像素,底部8个像素和左侧10个像素.

样品

以下代码示例有点过于复杂以演示此效果,但您可以运行它以查看不同填充值的效果.

默认 棉服

import javafx.application.Application;
import javafx.beans.binding.Bindings;
import javafx.beans.binding.StringExpression;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.layout.Priority;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;

public class SpacedOut extends Application {

    @Override
    public void start(final Stage stage) {
        MenuBar menuBar     = createMenuBar();
        VBox    controlPane = createControlPane(menuBar);

        VBox layout = new VBox(10,
                menuBar,
                controlPane
        );
        VBox.setVgrow(controlPane, Priority.ALWAYS);

        stage.setScene(new Scene(layout, 400, 200));
        stage.show();
    }

    private MenuBar createMenuBar() {
        MenuBar menuBar = new MenuBar();
        menuBar.getMenus().addAll(
            new Menu("ADD"),
            new Menu("EDIT"),
            new Menu("VIEW"),
            new Menu("HELP")
        );
        return menuBar;
    }

    private VBox createControlPane(MenuBar menuBar) {
        CheckBox useCustomPadding = new CheckBox("Use Custom Padding");
        useCustomPadding.setSelected(false);

        Slider padAmount = new Slider(0, 30, 15);
        padAmount.setShowTickMarks(true);
        padAmount.setShowTickLabels(true);
        padAmount.setMajorTickUnit(10);
        padAmount.setMaxWidth(200);
        padAmount.disableProperty().bind(
                useCustomPadding.selectedProperty().not()
        );

        VBox contentPane = new VBox(10,
                useCustomPadding,
                padAmount
        );
        contentPane.setPadding(new Insets(10));

        StringExpression paddingExpression = Bindings.concat(
                "-fx-padding: ", padAmount.valueProperty(), "px;"
        );

        menuBar.getMenus().forEach(
                menu -> menu.styleProperty().bind(
                        Bindings
                                .when(useCustomPadding.selectedProperty())
                                .then(paddingExpression)
                                .otherwise("")
                )
        );

        return contentPane;
    }

    public static void main(String[] args) {
        launch(args);
    }
}
Run Code Online (Sandbox Code Playgroud)