我混乱的代码随机颜色和大小圆圈

mwkjh3gx  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(282)
import javax.swing.*;

import java.awt.*;
import java.awt.event.*;
import java.awt.geom.*;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;

public class keyExample extends JPanel implements ActionListener, KeyListener {
    Timer t = new Timer(5, this);
    double x = 0, y = 0;

    double changeX = 0, changeY = 0;

    public keyExample() {
        t.start();
        addKeyListener(this);

        setFocusable(true);

        setFocusTraversalKeysEnabled(false);

    }

    private static final int N_CIRCLES = 10;

    private static final double MIN_RADIUS = 5;

    private static final double MAX_RADIUS = 50;

    public void run() {
        Random gen = new Random();

        for (int i = 0; i < N_CIRCLES; i++) {

            double r = gen.nextDouble(MIN_RADIUS, MAX_RADIUS);
            double x = gen.nextDouble(0, getWidth() - 2 * r);
            double y = gen.nextDouble(0, getHeight() - 2 * r);

            Circle circle = new Circle(x, y, 2 * r, 2 * r);
            circle.setFilled(true);

            int red = gen.nextInt(256);
            int green = gen.nextInt(256);
            int blue = gen.nextInt(256);

            Color backColor = new Color(red, green, blue);

            pane.add(panel);

        }
        add(circle);
    }
}

我应该创建一个代码来生成具有随机颜色和大小的圆。同时调整一些零件和另一个。我造成了我无法理解的混乱。请帮我修改代码,这样我就能产生我想要的结果。

1sbrub3j

1sbrub3j1#

所以,首先,没有 Random#nextDouble(min, max) ,您可以通过阅读javadocs来判断这一点。
所以,快速浏览一下javadocs Random#nextDouble
返回此随机数生成器序列中的下一个伪随机、均匀分布的介于0.0和1.0之间的双精度值。
这意味着 nextDouble 将从中返回一个“随机”数 0.01.0 . 这听起来可能没什么用,但你会惊讶的。
现在,您必须运行自己的最小/最大逻辑。不是很难。从计算两个值之间的范围开始,使用 Random#nextDouble 把它乘以“范围”再加上最小值,很简单。

double range = MAX_RADIUS - MIN_RADIUS;
double r = MIN_RADIUS + (gen.nextDouble() * range);

我不知道是什么 Circle 是的,你没有提供,所以,继续。
这个 pane.add(panel); 似乎是一个确定的灾难配方。我猜 panel 是组件,但不能将组件添加到自身。
假设 Circle 是某种成分 add(circle); 在外面 for-loop ,所以它不会起什么作用,因为 circle 仅在 for-loop 上下文。

相关问题