如何在JavaFX场景中定位按钮(或任何GUI元素)



我正试图将JavaFX按钮放在UI上的特定位置(特定坐标),但什么都不起作用。我猜有一种方法可以用来做这件事,但我找不到。

您可以使用窗格。setLayoutX()和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();
}
}

layoutXlayoutY

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

在FXML中,可以使用从javafx.scene.Node继承的layoutXlayoutY属性。

根据JavaFX文档:

布局X

定义为了布局而添加到此节点变换的平移的x坐标。

布局Y

定义为了布局而添加到此节点变换的平移的y坐标。

下面的示例产生了一个窗口,其中Button元素以50的x坐标和100的y坐标定位。

样本.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);
  }
}

注意:您还可以使用setLayoutX()setLayoutY()方法在控制器中动态设置layoutXlayoutY属性的值,而不是通过标记。此外,您可以使用UI元素标记中的layoutXlayoutY标记(即<layoutX><layoutY>)来设置FXML标记内部的x坐标和y坐标,作为使用属性的替代方法。

最新更新