Java 创建随机形状 我用SecureRandom类声明了我的变量以获取随机值 在我的paintComponent方法中,我有一个for循环,以防创建许多随机形状。 如果随机值等于零,则绘制矩形,否则绘制椭圆形 当我运行我的项目时,我只得到一个形状,因为我所有的变量都在我的循环之外。 请给出如何实现该场景(创建许多随机形状)的提示? 谢谢

Java 创建随机形状 我用SecureRandom类声明了我的变量以获取随机值 在我的paintComponent方法中,我有一个for循环,以防创建许多随机形状。 如果随机值等于零,则绘制矩形,否则绘制椭圆形 当我运行我的项目时,我只得到一个形状,因为我所有的变量都在我的循环之外。 请给出如何实现该场景(创建许多随机形状)的提示? 谢谢,java,swing,Java,Swing,我的声明: SecureRandom RC = new SecureRandom(); int r = RC.nextInt(); int g2 = RC.nextInt(); int b = RC.nextInt(); int cl = (r + g2 + b) / 3; int choice = RC.nextInt(2); int x = RC.nextInt(230); int y = RC.nextInt(250); int w = RC.nextInt(115); int h =

我的声明:

SecureRandom RC = new SecureRandom();

int r = RC.nextInt();
int g2 = RC.nextInt();
int b = RC.nextInt();
int cl = (r + g2 + b) / 3;
int choice = RC.nextInt(2);
int x = RC.nextInt(230);
int y = RC.nextInt(250);
int w = RC.nextInt(115);
int h = RC.nextInt(125);
我的组件方法:

    for(int i = 1; i <= 10; i++)
    { 
        super.paintComponent(g);
        Color mc = new Color(cl);

        if(choice == 0)
        {
            g.setColor(mc);
            g.fillRect(x, y, w, h);
        }

        else
        {
            g.setColor(mc);
            g.fillOval(x, y, w, h);
        }
    }
for(int i=1;i
当我运行我的项目时,我只得到一个形状,因为我所有的变量都在我的循环之外

没错。您需要在循环内调用
choice=RC.nextInt(2);
,并根据返回的值创建一个新的椭圆形或矩形


这可能是一个好主意(虽然不是严格必要的)编写用于创建随机椭圆和矩形的单独函数。这样,循环就不必被此代码弄乱。

您需要将用于创建随机形状的所有变量放入for循环中,以便在for循环的每次迭代后,为每个变量创建新的随机值。只需取全部y我们的变量是您需要的,并将它们放在for循环中,而for循环只在for循环中使用。任何您希望始终保持相同的变量,都需要在for循环之前在外部进行初始化

下面的代码在每次迭代中创建一个完全随机的矩形或椭圆形

for(int i = 1; i <= 10; i++)
{ 
    int r = RC.nextInt();
    int g2 = RC.nextInt();
    int b = RC.nextInt();
    int cl = (r + g2 + b) / 3;

    int x = RC.nextInt(230);
    int y = RC.nextInt(250);
    int w = RC.nextInt(115);
    int h = RC.nextInt(125);

    super.paintComponent(g);
    Color mc = new Color(cl);

    int choice = RC.nextInt(2);
    if(choice == 0)
    {
        g.setColor(mc);
        g.fillRect(x, y, w, h);
    }
    else
    {
        g.setColor(mc);
        g.fillOval(x, y, w, h);
    }
}

用于(int i=1;谢谢,我试过了,但还是只画了一个形状。谢谢,我试过了,但当我调整窗口大小时,它会创建新的随机形状,我不想这样。这不应该在paint component方法中。这应该是程序初始化部分的一部分根据我的书,我应该在paintCo中有for循环Component方法。@I,绘制方法仅用于绘制。它不应更改任何要绘制的对象的状态。因此,您需要在类的构造函数中生成随机对象(或添加一个方法来完成此操作).
我尝试了,但仍然只绘制了一个形状
-您需要保留一个要绘制的形状的ArrayList。在构造函数中,您创建形状并将其添加到ArrayList中。在绘制方法中,您迭代ArrayList并绘制每个形状。有关允许您绘制多个形状的更多信息和工作示例,请参阅iple矩形。@camickr有没有办法不用ArrayList来解决这个问题?因为我的练习是在paintComponent内部创建一个for循环,而不使用数组或列表。只有语句、paintComponent和for循环借助于一些方法(或您所说的构造函数).
当我调整窗口大小时,它会创建新的随机形状,我不希望出现这种情况。
-您已经回答了自己的问题。您不能按当前的方式进行操作。您无法控制Swing何时确定组件需要重新绘制。调整框架大小就是一个例子。我给了您两种不同的方法!您知道吗n阅读提供的链接中的信息???谢谢,我已经阅读了这两种方法,事实是我必须在没有所有这些(重新绘制、清除等)的情况下解决练习,假设我对这些一无所知。我将for循环和语句保留在paintComponent中,它可以工作,但可以重新绘制。