/home/jfernan6/NetBeansProjects/CSX/src/npw/Number1.java
  1 /*
  2  *Program to paint a rectangle, centered in the canvas, made up of randomly
  3  *colored, black framed squares with white space between each square.
  4  */
  5  package npw;
  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  *@author jfernan6
 16  */
 17  public class Number1 {
 18      // REQUIRED INFRASTRUCTURE
 19  /**
 20  *@param args the command line arguments
 21  */
 22  public static void main(String[] args) {
 23      SwingUtilities.invokeLater(new Runnable() {
 24          public void run() {
 25              new Number1();
 26          }
 27      });
 28  }
 29  
 30  public Number1() {
 31      paintTheImage();
 32  }
 33  
 34  // THE SOLUTION TO THE GRAPICAL PROBLEM
 35  
 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      // MAKE THE METHOD INVARIANT WITH RESPECT TO PAINTER POSITION
 70      miro.mrt(((nrOfColumns-1)/2.0) * square.side());
 71      miro.mfd(((nrOfRows-1)/2.0) * square.side());
 72  }
 73  
 74  private static void paintOneRow(SPainter miro, int nrOfColumns, SSquare square) {
 75      int i = 1;
 76      while ( i <= nrOfColumns ) {
 77          paintOneSquare(miro,square);
 78          miro.mrt(square.side());
 79          i=i+1;
 80      }
 81      miro.mlt(nrOfColumns*square.side());
 82  }
 83  
 84  private static void paintOneSquare(SPainter miro, SSquare square) {
 85      miro.setColor(randomColor());
 86      miro.paint(square);
 87      miro.setColor(Color.BLACK);
 88      miro.draw(square);
 89  }
 90  
 91  private static Color randomColor() {
 92      Random rgen = new Random();
 93      int r = rgen.nextInt(256);
 94      int g = rgen.nextInt(256);
 95      int b = rgen.nextInt(256);
 96      return new Color(r,b,g);
 97   }
 98 }
 99