繁体   English   中英

在 JavaFX 中按下按钮时如何创建随机圆圈位置?

How to create random circle locations when Button is pressed in JavaFX?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试从 Udemy 课程中学习 Java,并且在进入以下部分之前,我被要求创建一个作业。

任务是编写一个 JavaFX 应用程序,该应用程序显示一个圆圈和一个按钮,每次按下所述按钮时,圆圈应移动到随机位置。

到目前为止,我已经创建了一个代码来计算我单击按钮的次数,现在我想将圆圈与计数一起移动:

public class CircleJumper extends Application {

    // Declare Variables
    private int count;
    private Circle initCircle;
    private Button initButton;
    private Text countText;

    /*
    *
    * Write function here
    *
    */
    @Override
    public void start(Stage primaryStage){

        // Initiate Variables
        count = 0;
        initCircle = new Circle(30, -50, 30);
        initButton = new Button("Click Me!");
        countText = new Text("Clicks: 0");
        // Here its where I built the click counter
        initButton.setOnAction((event) -> {
            count++;
            countText.setText("Pushes: " + count);
        });        
        ;
        Group baseDemo = new Group(initButton, countText);

        FlowPane pane = new FlowPane(baseDemo, initCircle);
        pane.setAlignment(Pos.CENTER);
        pane.setHgap(20);
        pane.setStyle("-fx-background-color: cyan");

        Scene scene = new Scene(pane, 600, 300);

        primaryStage.setTitle("Draw a Circle when Button is Pressed");
        primaryStage.setScene(scene);
        primaryStage.show();
    }

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

}

更新:我决定将我的变量计数声明为 = Math.random(); 并创建了一个圆圈。 之后,单击按钮应该会获取生成的 Math.random 并将其放入 setTranslate 中,对吗?

    public void start(Stage primaryStage){

        // Initiate Variables
        count = Math.random();
        initCircle = new Circle(30, 50, 30);
        initButton = new Button("Click Me!");

        Group circlePos = new Group(initCircle);
        circlePos.setTranslateX(10);
        circlePos.setTranslateY(10);

        initButton.setOnAction((event) -> {
            count++;
            circlePos.setTranslateY(count);
            circlePos.setTranslateX(count);
        });

        Group baseDemo = new Group(initButton);

        FlowPane pane = new FlowPane(baseDemo, initCircle);
        pane.setAlignment(Pos.CENTER);
        pane.setHgap(20);
        pane.setStyle("-fx-background-color: cyan");

        Scene scene = new Scene(pane, 600, 300);

        primaryStage.setTitle("Draw a Circle when Button is Pressed");
        primaryStage.setScene(scene);
        primaryStage.show();
    }
1 个回复

首先自己尝试一下,但我会发布一个解决方案,以便您可以看到它是如何完成的,以防您遇到困难。

  1. 在您的应用程序初始化方法中创建一个随机
  2. 在增加点击次数的地方, 使用random.nextInt(bound)从随机数中获取几个整数
  3. 将圆centerXcenterY设置为您的随机值。
  4. 完毕。

好的,还没有完全完成,当你尝试它时会发现问题(你应该这样做)是它不起作用,圆圈似乎不会以你设置的 x 和 y 值为中心。 这是因为 Circle 位于布局窗格 (FlowPane) 中,它将忽略您的手动布局设置(尽管不转换值)。 解决方案是将圆圈放入组中(作为第一项,使其位于所有内容下方),然后将流窗格放入组中,在 FlowPane 中您有您的按钮并单击计数器。

您可能希望将 translateX/Y 保留为 animation 而不是布局,尽管它可以用于移动形状并且也可以因此使用。

import javafx.application.Application;
import javafx.scene.*;
import javafx.scene.control.Button;
import javafx.scene.layout.FlowPane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.text.Text;
import javafx.stage.Stage;

import java.util.Random;

public class CircleJumper extends Application {
    private static final double MAX_X = 600;
    private static final double MAX_Y = 300;

    private int clickCount = 0;
    private Random random;

    @Override
    public void init() {
        random = new Random();
    }

    @Override
    public void start(Stage stage){
        Circle circle = new Circle(MAX_X / 2, MAX_Y / 2, 30);
        Button button = new Button("Click Me!");
        Text clickCountText = new Text("Clicks: " + clickCount);

        button.setOnAction((event) -> {
            clickCount++;
            clickCountText.setText("Clicks: " + clickCount);

            circle.setCenterX(random.nextInt((int) MAX_X));
            circle.setCenterY(random.nextInt((int) MAX_Y));
        });        

        Group layout = new Group(
                circle,
                new FlowPane(button, clickCountText)
        );

        stage.setScene(new Scene(layout, MAX_X, MAX_Y, Color.CYAN));
        stage.setResizable(false);
        stage.show();
    }

    public static void main(String[] args) {
        launch(args);
    }
}
1 在javafx中为长按或按下Button创建方法

在我的程序中,长按/单击按钮时需要执行一个操作。 因此,我决定创建一个方法来获取按钮的参数,并在按钮单击时间超过1秒时返回一个布尔值: } MAIN.JAVA 但是每次我快速单击按钮时,它都会显示几个“ PRESSED !!!” 所以它不起作用。 2000000000 ...

2 java fx在按下按钮时创建随机矩形和圆形

我想在javafx中创建一个程序,当按下按钮时,矩形或圆形创建随机尺寸和颜色。 我编写代码但面临一些问题。 当我点击按钮时,图形出现但是当我再次点击它时图保持不变。 3-4次点击后数字正在变化。 ...

4 JLabel-Array在Button按下时创建

我想在按钮按下时创建一个数组的JLabel。 我从未对Arrays做过任何事情,因此也许是某种训练。 我试过了,但是行不通。 预期结果:每次我按下按钮,都会创建20个JLabel之一。 这是我的课: 编辑:更新的代码 EDIT2:更新了for循环 EDIT3:我重新设计了 ...

5 JavaFX中的旋转圆

我正在创建一个应用程序,该应用程序包含一个模拟模拟,用于以减小的加速度均匀旋转圆。 但这并不一定与物理学完全一样。 我正在使用JavaFX。 我在JavaFX中使用动画和时间轴。 但是,据我所知,他们只是在固定的时间内创建动画。 但是,我的应用程序要求圆将其速度降低到零,然后停止。 ...

6 JavaFX在创建边界矩形时删除了一个以上的圆

我正在制作一个javafx应用程序,它在用户单击主鼠标时在用户创建的圆周围创建一个有界矩形。 用户还可以使用辅助鼠标按钮删除一个圆,并且边界矩形应做出相应的反应,并将剩余的圆用作其上限和下限。 我的程序的问题是,当我尝试连续删除一个以上的圆圈时,它不起作用(它只会删除最后一个圆圈并调整其大小 ...

8 如何在JavaFX的单个Button中创建和设置2个标签的样式?

您遇到过这种按钮吗? 您知道如何创建它吗? 更新资料 Menai只是帮助我意识到此按钮中必须包含2个标签。 左标签具有黑色背景色和白色文本填充色,而右标签具有银色背景色和红色文本填充色。 我想知道如何创建(使用Java或.fxml)和样式(CSS)带有2个标签的按钮, ...

9 在 JavaFX 中生成随机数的圆

我正在尝试使用javaFX构建游戏,就像PACMAN一样,但不是 PACMAN 。 我想在游戏开始时随机生成一些圆圈( 5-10 个圆圈)。 我知道如何创建圆圈,但我不知道如何随机生成它们(我的意思是随机的圆圈数,5-10 个圆圈)。 请告诉我该怎么做。 ...

10 加载时javafx旋转圆圈

我有一个加载一些数据的方法,这可能需要一段时间,问题是你仍然可以点击东西,这可能会使程序崩溃。 因此,当您单击按钮并启动该方法时,我正在寻找加载循环的特定实现。 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM