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 200
Image
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);
vous avez 2 choix:
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();
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();
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>