生成随机图形+有关学习Java的问题

时间:2019-07-02 00:48:54

标签: for-loop random graphics jpanel

开始之前:在尝试学习编码时,可以向Stack Overflow提交问题吗?我确实已经花了大约20个小时来解决这个问题,并且完全陷入了困境,但是如果我仍然对实现如何制定自己的解决方案的经验感到困惑,请说出Stack Overlords一词。

我正在尝试创建一个函数,该函数创建十个大小和位置随机且颜色随机的圆。

大小和位置都是半随机的,因为圆的半径必须在5-50像素之间;该位置必须在Jpanel之内。

颜色可以是任何颜色。圆的生产必须在十个位置停止,并且所有圆必须一次在同一Jpanel中是静态的。

我已经解决了这个问题,几乎完全是因为在生成Jpanel之后使十个圆保持不变。

我尝试在我认为可以产生预期结果的代码的各个部分周围应用基本的for循环。我的for循环如下所示。

for(int i = 0; i < 10; ++i) {
} 
    package assignment3;
    import java.awt.*;
    import java.awt.event.*;
    import javax.swing.*;
    import java.util.Random;
    import javax.swing.JFrame;

    public class Random_Circles extends JPanel{

    private static final long serialVersionUID = 1L;

    // Below is the input for our random size.
        public static int RandomSize() {
            double randomDouble = Math.random();
            randomDouble = randomDouble * 50 + 1;
            int randomInt = (int) randomDouble;
            return randomInt;
        }

    // Below is the input for our random X-coordinate.
        public static int RandomPosition1() {
            double randomDouble = Math.random();
            randomDouble = randomDouble * 900 + 1;
            int randomInt = (int) randomDouble;
            return randomInt;
        }

    // Below is the input for our random Y-coordinate.
        public static int RandomPosition2() {
            double randomDouble = Math.random();
            randomDouble = randomDouble * 400 + 1;
            int randomInt = (int) randomDouble;
            return randomInt;
        }
    // I don't really know what this does, but I've gotta do it apparently. 
        Random rand = new Random();

    // Below is the input for our random color.
        public void paintComponent(Graphics RC) {
            super.paintComponent(RC);
            this.setBackground(Color.white); 

            // Random Size  
            int RS; 
            RS = RandomSize();

            // X-coordinate
            int RP1;
            RP1 = RandomPosition1();

            // Y-coordinate
            int RP2;
            RP2 = RandomPosition2();

            // Color inputs
            float r = rand.nextFloat();
            float g = rand.nextFloat();
            float b = rand.nextFloat();
            Color randomColor = new Color(r, g, b);

            // Color function
            RC.setColor(randomColor);

            // Location and size function 
            RC.fillOval(RP1, RP2, RS, RS);
            }
    }

产生Jpanel的主函数调用先前的代码。

    package assignment3;
    import javax.swing.JFrame;

    import assignment3.Random_Circles;

    public class Random_Circles_Exe {

            public static void main(String[] args) {
                JFrame f = new JFrame("Random Cirlces");
                f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                Random_Circles r = new Random_Circles();
                f.add(r);
                f.setSize(1000,500);
                f.setVisible(true);
                }
            }

预期:JPanel中出现并保留了十个带有必需参数的圆圈。

实际:该函数运行的第二个循环中会生成十个圆圈,但是每个新的圆圈都会使旧的圆圈失效。重新调整JPanel的大小(只需单击并拖动其边框),就会生成更多的圆圈。

0 个答案:

没有答案