Ajouter de l'espace entre les boutons dans VBox

j'ai une collection de boutons:

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

je veux ajouter un peu d'espacement entre ces boutons, sans utiliser une feuille CSS. Je pense qu'il devrait être un moyen pour cela.

setPadding (); est pour les boutons dans la boîte. setMargin(); doit être pour la même Boîte. Mais je n'ai pas trouvé le moyen pour l'espacement entre les boutons.

je suis content pour toutes les idées. :)

23
demandé sur codepleb 2013-08-21 21:06:25

4 réponses

VBox prise en charge de l'espacement:

VBox menuButtons = new VBox(5);

ou

menuButtons.setSpacing(5);
43
répondu Sergey Grinev 2017-03-02 13:52:57

appel setSpacing méthode et passer un peu de valeur. Exemple HBox(il en est de même pour 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();
    }
}

Et c'est à quoi il ressemble:

Sans espacement:

enter image description here

Avec un espacement:

enter image description here

16
répondu Branislav Lazic 2013-09-10 00:43:42

si vous utilisez FXML, utilisez le spacing l'attribut:

<VBox spacing="5" />
7
répondu gronostaj 2015-11-05 19:38:26

Comme d'autres l'ont mentionné, vous pouvez utiliser setSpacing().

cependant, vous pouvez aussi utiliser setMargin(), il n'est pas pour le volet de la boîte ou dans vos mots), c'est pour Nodes. setPadding() la méthode est pour la vitre elle-même. En fait, setMargin() prend un noeud comme paramètre pour vous permettre de deviner à quoi il sert.

Par exemple:

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();

vous pouvez obtenir le même résultat si vous remplacez cette ligne par

pane.setSpacing(10);

si vous avez plusieurs noeuds qui devraient être espacées, setSpacing() méthode est beaucoup plus pratique car vous devez appeler setMargin() pour chaque nœud et ce serait ridicule. Cependant, setMargin() est ce que vous avez besoin si vous avez besoin d' marges(duh) autour d'un nœud que vous pouvez déterminer combien de chaque côté car setSpacing() méthodes places spaces entre les noeuds, pas entre le noeud et les bords de la fenêtre.

6
répondu Haggra 2016-09-21 14:19:28