gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:12:41 29 4
gpt4 key购买 nike

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

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());
}

最佳答案

这个怎么样?

        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();

关于java - 如何在JavaFX场景中定位按钮? (随机),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49760378/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com