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