SimpleDots.java
package npw;

import painter.SPainter;
import shapes.SCircle;
import javax.swing.*;
import java.awt.*;
import java.util.Random;
import java.util.Scanner;
import static javax.swing.SwingUtilities.invokeLater;

public class SimpleDots {
    private String color = getString( "Which Color " );
    private int width = getNumber("width");
    private int height = getNumber("height");
    private int dotSpacing = getNumber("dot spacing");

    private SimpleDots() {
        paintTheImage();
    }

    public static void main(String[] args) {
        invokeLater( SimpleDots::new );
    }

    private void paintTheImage(){
                  // Establish the painter
                  SPainter painter = new SPainter("Simple Dots", width, height);
                  SCircle dot = new SCircle(5);

                  painter.mfd(height/2 -  10);
                  painter.tl(90);
                  painter.mfd(width/2 - 10);
                  painter.tl(90);
                 // Paint it!
                 paintGradient(painter, dot, height, width, dotSpacing);
              }

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

              // Supports floating point numbers as spacingFactor values
              private void paintGradient(SPainter painter, SCircle dot, int height, int width, int colWidth){
                  int cols = 0;

                  int nrOfCols = ( width / colWidth ) - 2;

                  while (cols < nrOfCols){
                      nextCol(painter, colWidth);
                      cols = cols + 1;
                      paintColumn(painter, dot, height);
                  }

                     }

    private void nextCol(SPainter painter, double colWidth) {
        painter.tl(90);
        painter.mfd(colWidth);
        painter.tr(90);
    }

    private void paintOneDot(SPainter painter, SCircle dot){
        randomColor(painter);
        painter.paint(dot);
}

    private void randomColor(SPainter painter) {
        Random rgen = new Random();
        if (color.equalsIgnoreCase("red")) {
            painter.setColor(Color.RED);
        } else if (color.equalsIgnoreCase("green")) {
            painter.setColor(Color.GREEN);
        } else if (color.equalsIgnoreCase("blue")) {
            painter.setColor(Color.BLUE);
        } else if (color.equalsIgnoreCase("random")) {
            int r = rgen.nextInt(255);
            int g = rgen.nextInt(255);
            int b = rgen.nextInt(255);
            painter.setColor(new Color(r, g, b));
        } else {
            painter.setColor(Color.BLACK);
        }

    }

    private void paintColumn(SPainter painter, SCircle dot, int height) {
                 int travel = dotSpacing;
                 int totalDistanceTraveled = 0;

                 while(totalDistanceTraveled < height) {
                     painter.mfd(travel);
                     paintOneDot(painter, dot);
                     totalDistanceTraveled = totalDistanceTraveled + travel;
                 }
                 painter.mbk(totalDistanceTraveled);
                      }

}