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.
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();
}
}
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()
etsetLayoutY()
méthodes pour définir les valeurs des propriétéslayoutX
etlayoutY
dynamiquement dans le contrôleur, plutôt que via le balisage. De plus, vous pouvez utiliser les baliseslayoutX
etlayoutY
(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.