DEV Community

BAMHITS22
BAMHITS22

Posted on

WHATS WRONG WITH THIS I NEED HELP

package com.bornander.circles;

import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList;
import java.util.Random;

import javax.swing.JFrame;

public class Program extends JFrame {

private static Random rnd = new Random();

private static class Circle {
    public float x;
    public float y;
    public float r;
    public Circle(float x, float y, float r) {
        this.x = x;
        this.y = y;
        this.r = r;
    }
}

private Color[] colors = new Color[] {
        Color.RED,
        Color.BLUE,
        Color.BLACK,
        Color.WHITE,
        Color.MAGENTA,
        Color.WHITE
};

private ArrayList<Circle> circles = new ArrayList<Circle>();

public Program() {
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    setSize(800, 600);
    setVisible(true);
    circles.add(new Circle(400, 300, 200));
    addMouseListener(new MouseListener() {

        @Override
        public void mouseClicked(MouseEvent arg0) {
            addCircle();
        }

        @Override
        public void mouseEntered(MouseEvent arg0) { }

        @Override
        public void mouseExited(MouseEvent arg0) { }

        @Override
        public void mousePressed(MouseEvent arg0) { }

        @Override
        public void mouseReleased(MouseEvent arg0) { }
    });
}

private void addCircle() {
    Circle last = circles.get(circles.size() - 1);
    float newRadius = 0.8f * last.r; // Next circle is 80% of last
    float delta = last.r - newRadius;

    float x = (rnd.nextFloat() * delta) * (rnd.nextBoolean() ? 1.0f : -1.0f);
    float maxY = (float)Math.sqrt(delta*delta - x*x);

    float y = rnd.nextFloat() * maxY *  (rnd.nextBoolean() ? 1.0f : -1.0f);
    circles.add(new Circle(last.x+x, last.y+y, newRadius));

    repaint();
}

@Override
public void paint(Graphics graphics) {
    Graphics2D g = (Graphics2D)graphics;
    g.setColor(Color.GREEN);
    g.fillRect(0, 0, getWidth(), getHeight());

    int index = 0;
    for(Circle circle : circles) {
        g.setColor(colors[(index++) % colors.length]);
        int x = (int)(circle.x - circle.r);
        int y = (int)(circle.y - circle.r);
        int d = (int)(2 * circle.r);
        g.fillOval(x, y, d, d);
    }
}

public static void main(String[] args) {

    Program program = new Program();

}

}

Top comments (1)

Collapse
 
colathro profile image
Colton Lathrop

I'm not 100% familiar with Java; but my C# experience is telling me immediately that the Circle class being static won't allow you to new them up for you to put into your ArrayList.

AFAIK, static is a singleton that is generated once at runtime and can't be instanced. (Which is what you are trying to do.)