netbeans 如何在JavaFX中定位按钮

xcitsw88  于 2022-11-10  发布在  Java
关注(0)|答案(2)|浏览(257)

我使用的是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);
    }

}

Netbeans为我提供了0个错误,除了按钮的位置之外,其他一切都很好。
请帮我找到我的问题。

zu0ti5jz

zu0ti5jz1#

按钮的容器是StackPaneStackPanePane的一个实现,默认情况下,它会将其子项布局在自身的中心。因此,每当场景需要执行布局时,StackPane将设置layoutXlayoutY的值(因此会覆盖您设置的任何内容)。这种行为发生在大多数(如果不是全部)Pane的子类中。
如果需要手动定位子节点,则需要使用通用的Pane容器。您可以选择将其子类化并提供自己的布局策略/逻辑,也可以直接在子节点上设置layoutXlayoutY值。
如果您需要StackPane提供的布局策略,但又希望它的位置与默认位置略有不同,那么您可能需要查找translateXProperty()translateYProperty()

wnrlj8wa

wnrlj8wa2#

30    root.getChildren().add(btn1);
31    btn1.setLayoutX(250);
32    btn1.setLayoutY(220);
33    root.getChildren().add(btn2);
34    btn1.setLayoutX(200);
35    btn1.setLayoutY(200);

只要取右边的变量(consistent)btn1就可以得到同一方向的两个坐标(第31行中的X为250,第34行中的X为200),因此没有直接设置坐标的按钮在该布局中具有坐标(0,0)。

相关问题