简体   繁体   English

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

[英]java fx creates random rectangle and circle when button is pressed

I want to make a program in javafx in which when a button is pressed rectangle or circle is created with random dimension and color. 我想在javafx中创建一个程序,当按下按钮时,矩形或圆形创建随机尺寸和颜色。 I have written code but facing some problem. 我编写代码但面临一些问题。 In it when I'm clicking button, figure is appearing but when i click it again figure stays same. 当我点击按钮时,图形出现但是当我再次点击它时图保持不变。 After 3-4 clicks figure is changing. 3-4次点击后数字正在变化。

import javafx.application.*;
import javafx.stage.*;
import javafx.scene.*;
import javafx.scene.canvas.*;
import javafx.scene.control.*;
import javafx.scene.layout.*;
import javafx.scene.paint.*;
import javafx.scene.shape.*;
import javafx.scene.text.*;
import javafx.scene.image.*;
import javafx.collections.*;
import javafx.geometry.*;
import javafx.event.*;
import java.util.*;

public class ranshap extends Application
{
     double x1,y1,x2,y2;
     Rectangle rectangle;
     Circle circle;
     Color rectangleColor;
     Color circleColor;
     Button b;
     Pane pane;
     Scene scene;
     Stage stage;

    public void start (Stage stage)
    {
        stage.setTitle("Drawing Rectangle and Circle");
        CreateRect c= new CreateRect();
        b= new Button("Click me");
        b.setOnAction(c);

        rectangle = new Rectangle();
        circle = new Circle();
            /*rectangle.setX(50);
        rectangle.setY(50);
        rectangle.setWidth(200);
        rectangle.setHeight(50);
        rectangleColor= new Color(0.0,0.8,0.2,0.6);
        rectangle.setFill(rectangleColor);*/
        pane= new Pane();
        pane.getChildren().add(b);
        scene= new Scene(pane,500,300);
        stage.setScene(scene);
        stage.show();
    }
    private class CreateRect implements EventHandler <ActionEvent>
    {

        public void handle(ActionEvent e)
        {
        double width,height,r,g,b,o,s,radius;
        Random generator= new Random();
        s=generator.nextDouble();
        if(s>0.5)
        {
        pane.getChildren().remove(circle);
        pane.getChildren().add(rectangle);
        width= generator.nextDouble()*100;
        height= generator.nextDouble()*100;
        r= generator.nextDouble();
        g= generator.nextDouble();
        b= generator.nextDouble();
        o= generator.nextDouble();
        rectangle.setX(50);
        rectangle.setY(50);
        rectangle.setWidth(width);
        rectangle.setHeight(height);
        rectangleColor= new Color(r,g,b,o);
        rectangle.setFill(rectangleColor);
        }
        else
        {
            pane.getChildren().remove(rectangle);
            pane.getChildren().add(circle);
            radius=generator.nextDouble()*100;
            circle.setCenterX (100);
            circle.setCenterY (100);
            circle.setRadius (radius);
            r= generator.nextDouble();
            g= generator.nextDouble();
            b= generator.nextDouble();
            o= generator.nextDouble();
            circleColor= new Color(r,g,b,o);
            circle.setFill(circleColor);
        }
        }
    }

}

Actrully, you add the same children twice. 很简单,你要两次添加相同的孩子。 Using the following code 使用以下代码

public class ranshap extends Application {
  double x1, y1, x2, y2;
  Rectangle rectangle;
  Circle circle;
  Color rectangleColor;
  Color circleColor;
  Button b;
  Pane pane;
  Scene scene;
  Stage stage;

  @Override
  public void start(Stage stage) {
    stage.setTitle("Drawing Rectangle and Circle");
    CreateRect c = new CreateRect();
    b = new Button("Click me");
    b.setOnAction(c);

    rectangle = new Rectangle();
    circle = new Circle();
    /*
     * rectangle.setX(50); rectangle.setY(50); rectangle.setWidth(200); rectangle.setHeight(50); rectangleColor= new
     * Color(0.0,0.8,0.2,0.6); rectangle.setFill(rectangleColor);
     */
    pane = new Pane();
    pane.getChildren().add(b);
    scene = new Scene(pane, 500, 300);
    stage.setScene(scene);
    stage.show();
  }

  private class CreateRect implements EventHandler<ActionEvent> {

    @Override
    public void handle(ActionEvent e) {
      double width, height, r, g, b, o, s, radius;
      Random generator = new Random();
      s = generator.nextDouble();
      pane.getChildren().remove(rectangle);
      pane.getChildren().remove(circle);
      if (s > 0.5) {
        pane.getChildren().add(rectangle);
        width = generator.nextDouble() * 100;
        height = generator.nextDouble() * 100;
        r = generator.nextDouble();
        g = generator.nextDouble();
        b = generator.nextDouble();
        o = generator.nextDouble();
        rectangle.setX(50);
        rectangle.setY(50);
        rectangle.setWidth(width);
        rectangle.setHeight(height);
        rectangleColor = new Color(r, g, b, o);
        rectangle.setFill(rectangleColor);
      } else {
        pane.getChildren().add(circle);
        radius = generator.nextDouble() * 100;
        circle.setCenterX(100);
        circle.setCenterY(100);
        circle.setRadius(radius);
        r = generator.nextDouble();
        g = generator.nextDouble();
        b = generator.nextDouble();
        o = generator.nextDouble();
        circleColor = new Color(r, g, b, o);
        circle.setFill(circleColor);
      }
    }
  }

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

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

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