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