Number4.java
//Simple Dots
package npw;

import java.awt.Color;
import java.util.Random;
import java.util.Scanner;
import javax.swing.JOptionPane;
import javax.swing.SwingUtilities;
import painter.SPainter;
import shapes.SCircle;

public class Number4 {
    // The solution to the graphical problem.
    private void paintTheImage() {
        // Get the input information fron the user.
        int nrOfRows = getNumber("rows");
        int nrOfColumns = getNumber("columns");
        int sizeOfCircle = getNumber("Circle radius lenght");
        String color = getString(" Red | Blue | Green");
        // Establish the painter.
        int height = nrOfRows * sizeOfCircle;
        int width = nrOfColumns * sizeOfCircle;
        SPainter miro = new SPainter("Number 3",width+500,height+500);
        miro.setBrushWidth(4);
        SCircle circle = new SCircle(sizeOfCircle);
        // Paint the rectangles.
        paintRectangle(miro,circle,nrOfRows,nrOfColumns,color);
    }



    private static String getString(String prompt) {
        String nss = JOptionPane.showInputDialog(null,prompt+"?");
        Scanner scanner = new Scanner(nss);
        String inputColor = scanner.nextLine();
        return nss;
    }

    private static int getNumber(String prompt) {
        String nss = JOptionPane.showInputDialog(null,prompt+"?");
        Scanner scanner = new Scanner(nss);
        return scanner.nextInt();
    }

    private static void paintRectangle(SPainter miro, SCircle circle,
                                       int nrOfRows, int nrOfColumns,String color) {
        // Position the painter to paint the rectangle of squares.
        miro.mlt(((nrOfColumns-1)/4.0) * circle.diameter());
        miro.mbk(((nrOfRows-1)/2.0) * circle.diameter());
        // Paint the rectangle of squares.
        int i = 1;
        while ( i <= nrOfRows) {
            paintOneRow(miro,nrOfColumns,circle,color);
            miro.mfd(circle.diameter());
            i = i + 1;
        }
        // Make the method invariant with respect to painter position.
        miro.mrt(((nrOfColumns-1)/2.0) * circle.diameter());
        miro.mfd(((nrOfRows-1)/2.0) * circle.diameter());
    }

    private static void paintOneRow(SPainter miro, int nrOfColumns, SCircle circle,String color) {
        int i = 1;
        while ( i <= nrOfColumns ) {
            paintOneCircle(miro,circle,color);
            miro.mrt(circle.diameter());
            i = i + 1;
        }
        miro.mlt(nrOfColumns*circle.diameter());
    }



    private static void paintOneCircle(SPainter miro, SCircle circle, String color) {
        if (color.equalsIgnoreCase("Red")) {
            miro.setColor(Color.RED);
        } else if (color.equalsIgnoreCase("Blue")) {
            miro.setColor(Color.BLUE);
        }else if (color.equalsIgnoreCase("Green")){
            miro.setColor(Color.GREEN);
        }else{
            miro.setColor(Color.black);
        }

        circle.s3();
        miro.paint(circle);
        circle.x3();

    }
    private static Color randomColor() {
        Random rgen = new Random();
        int r = rgen.nextInt(256);
        int g = rgen.nextInt(256);
        int b = rgen.nextInt(256);
        return new Color(r,b,g);
    }

    public Number4(){
        paintTheImage();
    }

    public static void main(String[] args){
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new Number4();
            }
        });
    }
}