/home/akc/NetBeansProjects/CS1/src/npw/Number1.java
  1 /*
  2  *Program to paint a rectangle, centered in the canvas, made up of randomly
  3  * colored, black framed squares
  4  */
  5 package npw;
  6 
  7 import java.awt.Color;
  8 import java.util.Random;
  9 import java.util.Scanner;
 10 import javax.swing.JOptionPane;
 11 import javax.swing.SwingUtilities;
 12 import painter.SPainter;
 13 import shapes.SSquare;
 14 
 15 /**
 16  *
 17  * @author akc
 18  */
 19 public class Number1 {
 20 
 21     /**
 22      * @param args the command line arguments
 23      */
 24     public static void main(String[] args) {
 25         SwingUtilities.invokeLater(new Runnable() {
 26             public void run() {
 27                 new Number1();
 28             }
 29         });
 30     }
 31 
 32     public Number1() {
 33         paintTheImage();
 34     }
 35 
 36     // THE SOLUTION TO THE GRAPICAL PROBLEM
 37     private void paintTheImage() {
 38         // GRAB THE INPUT INFORMATION
 39         int nrOfRows = getNumber("rows");
 40         int nrOfColumns = getNumber("columns");
 41         int sizeOfSquare = getNumber("square side length");
 42         // ESTABLISH THE PAINTER
 43         int height = nrOfRows * sizeOfSquare;
 44         int width = nrOfColumns * sizeOfSquare;
 45         SPainter miro = new SPainter("Number 1", width + 50, height + 50);
 46         miro.setBrushWidth(4);
 47         SSquare square = new SSquare(sizeOfSquare);
 48         // PAINT THE RECTANGLES
 49         paintRectangle(miro, square, nrOfRows, nrOfColumns);
 50     }
 51 
 52     private static int getNumber(String prompt) {
 53         String nss = JOptionPane.showInputDialog(null, prompt + "?");
 54         Scanner scanner = new Scanner(nss);
 55         return scanner.nextInt();
 56     }
 57 
 58     private static void paintRectangle(SPainter miro, SSquare square,
 59             int nrOfRows, int nrOfColumns) {
 60         // POSITION THE PAINTER TO PAINT THE RECTANGLE OF SQUARES
 61         miro.mlt(((nrOfColumns - 1) / 2.0) * square.side());
 62         miro.mbk(((nrOfRows - 1) / 2.0) * square.side());
 63         // PAINT THE RECTANGLE OF SQUARES
 64         int i = 1;
 65         while (i <= nrOfRows) {
 66             paintOneRow(miro, nrOfColumns, square);
 67             miro.mfd(square.side());
 68             i = i + 1;
 69         }
 70 
 71         // MAKE THE METHOD INVARIANT WITH RESPECT TO PAINTER POSITION
 72         miro.mrt(((nrOfColumns - 1) / 2.0) * square.side());
 73         miro.mfd(((nrOfRows - 1) / 2.0) * square.side());
 74     }
 75 
 76     private static void paintOneRow(SPainter miro, int nrOfColumns, SSquare square) {
 77         int i = 1;
 78         while (i <= nrOfColumns) {
 79             paintOneSquare(miro, square);
 80             miro.mrt(square.side());
 81             i = i + 1;
 82         }
 83         miro.mlt(nrOfColumns * square.side());
 84     }
 85 
 86     private static void paintOneSquare(SPainter miro, SSquare square) {
 87         miro.setColor(randomColor());
 88         miro.paint(square);
 89         miro.setColor(Color.BLACK);
 90         miro.draw(square);
 91     }
 92 
 93     private static Color randomColor() {
 94         Random rgen = new Random();
 95         int r = rgen.nextInt(256);
 96         int g = rgen.nextInt(256);
 97         int b = rgen.nextInt(256);
 98         return new Color(r, b, g);
 99     }
100 }
101