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

标签 java javafx

我想在javafx中制作一个程序,其中当按下按钮时会创建具有随机尺寸和颜色的矩形或圆形。我已经编写了代码,但遇到了一些问题。当我单击按钮时,会出现图形,但是当我再次单击它时,图形保持不变。点击 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);
        }
        }
    }

}

最佳答案

事实上,您将相同的子项添加了两次。使用以下代码

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

关于按下按钮时 java fx 创建随机矩形和圆形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42920134/

相关文章:

java - Java 8 中 throwingMerger 的替代方案

java - 使用 ZXing Reader 解码位图

java - java中FileDialog改变状态时是否可以收到回调

Java包: no class def found

java - 无法取回 SharedPreference 中保存的数据

css - JavaFX - 使用 setRowFactory 突出显示新行

java - JavaFX WebEngine 中的 HyperlinkListener

java - 将 Gluon Scene Builder 集成到 Eclipse 中?

java - 如何使用按钮更改矩形

java - 如何在没有 native 安装程序的情况下为使用 JavaFX 的应用程序制作可运行的 jar