CS1 Standard Demo Page

The following text was written to the standard output stream when the Number4 program was executed from Netbeans.

/*
 * Program to paint a rectangle, centered in the canvas, made up of randomly 
 * colored circles.
 */
package npw;

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

/**
 *
 * @author dmaslows
 */
public class Number4 {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new Number4();
            }
        });
    }

    public Number4() {
        paintTheImage();
    }

    private void paintTheImage() {
        int nrofrows = getNumber("rows");
        int nrofcolumns = getNumber("columns");
        int sizeofcircle = getNumber("circle diameter");
        String color = JOptionPane.showInputDialog(null, "Color?");
        int height = nrofrows * sizeofcircle;
        int width = nrofcolumns * sizeofcircle;
        SPainter miro = new SPainter("Number 4",width +300,height +300);
        miro.setBrushWidth(4);
        SCircle circle = new SCircle(sizeofcircle);
        paintRectangle(miro, circle, nrofrows, nrofcolumns, color);
    }

    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) {
        miro.mlt(((nrofcolumns - 1) / 2.0) * circle.diameter());
        miro.mbk(((nrofrows - 1) / 2.0) * circle.diameter());
        int i = 1;
        while (i <= nrofrows) {
            paintOneRow(miro, nrofcolumns, circle, color);
            miro.mfd(circle.diameter());

            i = i + 1;

        }
        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) {
            circle.s2();
            if (color == null) {
                color = "exit";
            } // user clicked on Cancel
            if (color.equalsIgnoreCase("blue")) {
                miro.setColor(Color.BLUE);
                miro.paint(circle);
                circle.x2();
            } else if (color.equalsIgnoreCase("red")) {
                miro.setColor(Color.RED);
                miro.paint(circle);
                circle.x2();
            }
            if (color.equalsIgnoreCase("green")) {
                miro.setColor(Color.GREEN);
                miro.paint(circle);
                circle.x2();
            } else if (color.equalsIgnoreCase("black")) {
                miro.setColor(Color.BLACK);
                miro.paint(circle);
                circle.x2();
            }
        }
}