如何在JavaFX中定位按钮

oum*_*iop 1 layout netbeans javafx button java-8

我正在使用NetBeans IDE 8.2 for JavaFX.我已经知道,为了改变按钮的位置,我需要使用setLayoutX/Y. 我试过这个,对按钮没有任何影响.这是我的代码:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package javafxapplication2;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

/**
 *
 * @author coolDawg1234
 */
public class JavaFXApplication2 extends Application {

    @Override
    public void start(Stage primaryStage) {

        String x = "1";
        String y = "0";

        Button btn1 = new Button(x);
        btn1.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                System.out.print(x);
            }
        });

        Button btn2 = new Button(y);
        btn2.setOnAction(new EventHandler<ActionEvent>() {

            @Override
            public void handle(ActionEvent event) {
                System.out.print(y);
            }
        });

        StackPane root = new StackPane();

        root.getChildren().add(btn1);
        btn1.setLayoutX(250);
        btn1.setLayoutY(220);
        root.getChildren().add(btn2);
        btn1.setLayoutX(200);
        btn1.setLayoutY(200);

        Scene scene = new Scene(root, 1000, 1000);

        primaryStage.setTitle("WHAT\'s GOOD MY MANS");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        launch(args);
    }

}
Run Code Online (Sandbox Code Playgroud)

Netbeans为此给出了0个错误,除了按钮位置以外的所有内容对我来说都很好.

请帮我找到问题所在.

Jai*_*Jai 5

按钮的容器是一个StackPane.StackPane是一种实现方式Pane,默认情况下,它将子项布置在其自身的中心.因此,每当场景需要执行布局时,StackPane将根据自己的布局策略在其方法中设置layoutXlayoutY值(因此覆盖您设置的任何内容)layoutChildren().对于大多数(如果不是全部)子类,会发生此行为Pane.

如果需要手动定位子节点,则需要使用通用Pane容器.您可以选择子类化它并提供自己的布局策略/逻辑,或者直接在子节点上设置layoutXlayoutY值.

如果您需要提供的布局策略StackPane,但是您希望它的位置与默认位置略有不同,那么您可能正在寻找translateXProperty()translateYProperty().