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

时间:2012-04-05 12:27:30

标签: user-interface button javafx position fxml

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

2 个答案:

答案 0 :(得分: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();
}
}

答案 1 :(得分:0)

layoutXlayoutY

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

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

根据JavaFX Documentation

  

layoutX

     

定义用于布局目的而添加到此Node的变换中的平移的x坐标。

     

布局Y

     

定义用于布局目的而添加到此Node的变换中的平移的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>)在内部设置x坐标和y坐标。使用FXML标记代替使用属性。