J'essaie de placer un bouton JavaFX à un endroit spécifique (coordonnées spécifiques) sur une interface utilisateur, mais rien ne fonctionne. Je suppose qu'il existe une méthode utilisée à cet effet, mais je ne la trouve pas.
Réponses
Trop de publicités?Vous pouvez utiliser les fonctions pane. 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
y layoutY
<Button text="Button" layoutX="50" layoutY="100" />
En FXML, vous pouvez utiliser la fonction layoutX
y layoutY
qui sont héritées de javafx.scene.Node
.
Selon le Documentation JavaFX :
layoutX
Définit la coordonnée x de la translation 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 translation qui est ajoutée à la transformation de ce nœud à des fins de mise en page.
L'exemple ci-dessous donne lieu à une fenêtre dans laquelle se trouve une 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);
}
}
Note : Vous pouvez également utiliser le
setLayoutX()
ysetLayoutY()
pour définir les valeurs de l'élémentlayoutX
ylayoutY
dynamiquement dans le contrôleur, plutôt que par le biais du balisage. En outre, vous pouvez utiliser la fonctionlayoutX
ylayoutY
(c'est-à-dire<layoutX>
y<layoutY>
) dans la balise de l'élément UI pour définir les coordonnées x et y dans le balisage FXML au lieu d'utiliser des attributs.