web-dev-qa-db-fra.com

Comment centrer un nœud dans un volet javafx

Comment créer un volet et placer un enfant Node au centre?

Disons que le Pane est 500 par 500 et le Node est un ImageView avec un 200 par 200Image

ImageView view = new ImageView();

Image img = new Image("test.png");
view.setImage(img);
Pane pane = new Pane();
pane.setMinWidth(500);
pane.setMinHeight(500);
pane.getChildren().add(view);
12
darewreck

vous avez 2 choix:

  1. Par exemple, en utilisant StackPane au lieu de Pane (car vous pouvez utiliser Pos )

    StackPane p = new StackPane();
    p.setPrefSize(700,700); //set a default size for your stackpane
    Image img = new Image("test.png"); //create an image
    ImageView v = new ImageView(img); //create an imageView and pass the image 
    
    p.getChildren().add(v); //add imageView to stackPane
    StackPane.setAlignment(v,Pos.CENTER_LEFT); //set it to the Center Left(by default it's on the center)
    stage.setScene(new Scene(p));
    stage.show();
    
  2. Vous pouvez utiliser JavaFx Scene Builder , c'est un outil de mise en page visuelle pour JavaFx. Par exemple, si je veux créer une disposition Hbox:

    <?xml version="1.0" encoding="UTF-8"?>
    
        <?import Java.lang.*?>
        <?import Java.net.*?>
        <?import Java.util.*?>
        <?import javafx.geometry.*?>
        <?import javafx.scene.*?>
        <?import javafx.scene.control.*?>
        <?import javafx.scene.effect.*?>
        <?import javafx.scene.image.*?>
        <?import javafx.scene.layout.*?>
        <?import javafx.scene.shape.*?>
        <?import javafx.scene.text.*?>
    
        <HBox alignment="CENTER" prefHeight="369.0" prefWidth="425.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/2.2" >
            <children>
                <ImageView fitHeight="150.0" fitWidth="200.0" pickOnBounds="true" preserveRatio="true" x="0.0" HBox.hgrow="NEVER">
                    <image>
                        <Image url="@../yourImg.png" />
                    </image>
                </ImageView>
            </children>
        </HBox>
    

    enregistrez-le sous myLayout.fxml dans votre classe principale et ajoutez ce qui suit à votre code:

    Hbox root = FXMLLoader.load(getClass().getResource("myLayout.fxml"));
    Scene scene = new Scene(root);
    stage.setScene(scene);
    stage.show();
    
19
user2768684

J'utilise généralement l'approche suivante pour centrer un nœud/volet:

<VBox alignment="CENTER">
    <HBox alignment="CENTER">
        <!-- your node/pane -->
    </HBox>
</VBox>
7
Eng.Fouad