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