/home/rkanin/NetBeansProjects/CS1/src/npw/Number2.java
  1 
  2 /*
  3 *Program to paint a rectangle, centered in the canvas,made up of randomly
  4 *colored, black framed squares.
  5 */
  6 package npw;
  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  * @authorblue
 18  */
 19 
 20 
 21 public class Number2 {
 22 // REQUIRED INFRASTRUCTURE
 23 
 24     /**
 25      * @paramargsthecommandlinearguments
 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 // THE SOLUTION TO THE GRAPICAL PROBLEM
 39 
 40     private void paintTheImage() {
 41 // GRAB THE INPUT INFORMATION
 42         int nrOfRows = getNumber("rows");
 43         int nrOfColumns = getNumber("columns");
 44         int sizeOfSquare = getNumber("square side length");
 45 // ESTABLISH THE PAINTER
 46         int height = nrOfRows * sizeOfSquare;
 47         int width = nrOfColumns * sizeOfSquare;
 48         SPainter miro = new SPainter("Number 1", width + 50, height + 50);
 49         miro.setBrushWidth(4);
 50         SSquare square = new SSquare(sizeOfSquare);
 51 // PAINT THE RECTANGLES
 52         paintRectangle(miro, square, nrOfRows, nrOfColumns);
 53     }
 54 
 55     private static int getNumber(String prompt) {
 56         String nss = JOptionPane.showInputDialog(null, prompt + "?");
 57         Scanner scanner = new Scanner(nss);
 58         return scanner.nextInt();
 59     }
 60 
 61     private static void paintRectangle(SPainter miro, SSquare square,
 62             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 // MAKE THE METHOD INVARIANT WITH RESPECT TO PAINTER POSITION
 74         miro.mrt(((nrOfColumns - 1) / 2.0) * square.side());
 75         miro.mfd(((nrOfRows - 1) / 2.0) * square.side());
 76     }
 77 
 78     private static void paintOneRow(SPainter miro, int nrOfColumns, SSquare square) {
 79         int i = 1;
 80         while (i <= nrOfColumns) {
 81             paintOneSquare(miro, square);
 82             miro.mrt(square.side());
 83             i = i + 1;
 84         }
 85         miro.mlt(nrOfColumns * square.side());
 86     }
 87 
 88     private static void paintOneSquare(SPainter miro, SSquare square) {
 89         miro.setColor(randomColor());
 90         square.s2();
 91         miro.paint(square);
 92         miro.setColor(Color.BLACK);
 93         miro.draw(square);
 94         square.x2();
 95     }
 96 
 97     private static Color randomColor() {
 98         Random rgen = new Random();
 99         int r = rgen.nextInt(256);
100         int g = rgen.nextInt(256);
101         int b = rgen.nextInt(256);
102         return new Color(r, b, g);
103     }
104 }
105