如何在JavaFX场景中定位按钮? (随机)

时间:2018-04-10 18:10:19

标签: java javafx

当我按下按钮时,我想以某种方式让按钮随机改变他的位置。我有一个想法如何解决这个问题,其中一个我在下面突出显示,但我已经认为这不是我需要的。

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

public class Ulesanne6 extends Application {

    public static void main(String[] args) {
        Application.launch(args);
    }

    @Override
    public void start(Stage primaryStage) {
        primaryStage.setTitle("Test");
        Button btn = new Button();
        btn.setText("Hello");
        btn.setOnAction(new EventHandler <javafx.event.ActionEvent>() {
            @Override
            public void handle(javafx.event.ActionEvent event) {
                //btn.setLayoutY(Math.random());
                //btn.setLayoutX(Math.random());
            }
        });

        StackPane root = new StackPane();
        root.getChildren().add(btn);
        primaryStage.setScene(new Scene(root, 800, 600));
        primaryStage.show();
    }
}

我认为在某处,我想这样做,但我不知道如何......但是。

public void handle(javafx.event.ActionEvent event) {
                //btn.setLayoutY(Math.random());
                //btn.setLayoutX(Math.random());
            }

1 个答案:

答案 0 :(得分:2)

这个怎么样?

        public void handle(javafx.event.ActionEvent event) {
            btn.setTranslateX(ThreadLocalRandom.current().nextDouble(800));
            btn.setTranslateY(ThreadLocalRandom.current().nextDouble(600));
        }

您可能还需要确保按钮位于屏幕上的某个位置而不是屏幕上。因此,如果您知道按钮的宽度和高度,请将其考虑在内。

        public void handle(javafx.event.ActionEvent event) {
            btn.setTranslateX(ThreadLocalRandom.current().nextDouble(800 - buttonWidth));
            btn.setTranslateY(ThreadLocalRandom.current().nextDouble(600 - buttonHeight));
        }

编辑:请注意您使用StackPane作为您的根父母。 StackPane喜欢根据StackPane的对齐属性定位其子项。因此,为了使我的答案正常工作,您必须使您的根父母Group而不是StackPane。常规的Pane也可以使用。

    Group root = new Group();