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

问题描述 投票:13回答:2

我试图将UIFX按钮放在UI上的特定位置(特定坐标),但没有任何工作。我猜有一个方法用于此,但我找不到它。

user-interface button javafx position fxml
2个回答
22
投票

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

0
投票

layoutX and layoutY

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

在FXML中,您可以使用从layoutX继承的layoutYjavafx.scene.Node属性。

根据JavaFX Documentation

layoutX

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

布局

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

下面的例子产生一个窗口,其中Button元素的x坐标为50,y坐标为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);
  }
}

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

© www.soinside.com 2019 - 2024. All rights reserved.