web-dev-qa-db-fra.com

Ajouter de l'espace entre les boutons dans la 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 de feuille CSS. Je pense qu'il devrait y avoir un moyen pour cela.

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

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

26
codepleb

VBox prend en charge l'espacement:

VBox menuButtons = new VBox(5);

ou

menuButtons.setSpacing(5);
52
Sergey Grinev

Appelez simplement la méthode setSpacing et transmettez une valeur. Exemple avec HBox (c'est la même chose 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 voici à quoi ça ressemble:

Sans d'espacement:

enter image description here

Avec espacement:

enter image description here

16
Branislav Lazic

Si vous utilisez FXML, utilisez l'attribut spacing:

<VBox spacing="5" />
8
gronostaj

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

Cependant, vous pouvez également utiliser setMargin(), ce n'est pas pour le volet (ou la boîte dans vos mots), c'est pour les Nodes individuels. La méthode setPadding() concerne le volet lui-même. En fait, setMargin() prend un nœud comme paramètre pour que vous puissiez 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 pourriez obtenir le même résultat en remplaçant cette ligne par

pane.setSpacing(10);

Si vous avez plusieurs nœuds qui doivent être espacés, la méthode setSpacing() est beaucoup plus pratique car vous devez appeler setMargin() pour chaque nœud individuel et ce serait ridicule. Cependant, setMargin() est ce dont vous avez besoin si vous avez besoin de marges (duh) autour d'un nœud que vous pouvez déterminer combien de chaque côté car les méthodes setSpacing() placent des espaces niquement entre les nœuds, pas entre le nœud et les bords de la fenêtre.

6
Haggra