簡體   English   中英

java fx在按下按鈕時創建隨機矩形和圓形

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

我想在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);
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM