web-dev-qa-db-fra.com

Comment positionner un bouton (ou tout élément GUI) dans une scène JavaFX?

J'essaie de mettre un bouton JavaFX à un endroit spécifique (coordonnées spécifiques) sur une interface utilisateur, mais rien ne fonctionne. Je suppose qu'une méthode est utilisée pour cela, mais je ne la trouve pas.

13
Milos Maksimovic

vous pouvez utiliser le volet. setLayoutX () et setLayoutY ().

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;

public class Tester extends Application {


public static void main(String[] args) {
    launch(args);
}

@Override
public void start(Stage primaryStage) {
    primaryStage.setTitle("Hello World!");
    Button btn = new Button();
    btn.setText("'Hello World'");
    btn.setOnAction(new EventHandler<ActionEvent>() {

        @Override
        public void handle(ActionEvent event) {
            System.out.println("Hello World!");
        }
    });

    Pane root = new Pane();
    btn.setLayoutX(250);
    btn.setLayoutY(220);
    root.getChildren().add(btn);
    primaryStage.setScene(new Scene(root, 300, 250));
    primaryStage.show();
}
}
23
Vinod CG

layoutX et layoutY

<Button text="Button" layoutX="50" layoutY="100" />

Dans FXML, vous pouvez utiliser les propriétés layoutX et layoutY héritées de javafx.scene.Node .

Selon la Documentation JavaFX :

layoutX

Définit la coordonnée x de la traduction qui est ajoutée à la transformation de ce nœud à des fins de mise en page.

layoutY

Définit la coordonnée y de la traduction qui est ajoutée à la transformation de ce nœud à des fins de mise en page.

L'exemple ci-dessous donne une fenêtre dans laquelle un élément Button est positionné avec une coordonnée x de 50 Et une coordonnée y de 100 .

sample.fxml

<?xml version="1.0" encoding="UTF-8"?>

<?import javafx.scene.Scene?>
<?import javafx.scene.layout.Pane?>
<?import javafx.scene.control.Button?>

<Scene>
  <Pane prefWidth="300" prefHeight="300">
    <!-- Button Positioned Using layoutX and layoutY -->
    <Button text="Button" layoutX="50" layoutY="100" />
  </Pane>
</Scene>

Main.Java

package sample;

import javafx.application.Application;
import javafx.stage.Stage;
import javafx.scene.Scene;
import javafx.fxml.FXMLLoader;

public class Main extends Application {
  @Override
  public void start(Stage primaryStage) throws Exception {
    Scene scene = FXMLLoader.load(getClass().getResource("sample.fxml"));
    primaryStage.setTitle("Window Title");
    primaryStage.setScene(scene);
    primaryStage.show();
  }

  public static void main(String[] args) {
    launch(args);
  }
}

Remarque: Vous pouvez également utiliser les setLayoutX() et setLayoutY() méthodes pour définir les valeurs des propriétés layoutX et layoutY dynamiquement dans le contrôleur, plutôt que via le balisage. De plus, vous pouvez utiliser les balises layoutX et layoutY (c'est-à-dire <layoutX> Et <layoutY>) dans la balise d'élément d'interface utilisateur pour définir les coordonnées x et les coordonnées y à l'intérieur du balisage FXML comme alternative à l'utilisation d'attributs.

1
Grant Miller