/home/jfernan6/NetBeansProjects/CSX/src/npw/Number3.java
  1 /*
  2  *Program to paint a rectangle, centered in the canvas, made up of randomly
  3  *colored, black framed squares
  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.SCircle;
 13  /**
 14  *
 15  *@author jfernan6
 16  */
 17  public class Number3 {
 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 Number3();
 26          }
 27      });
 28  }
 29  
 30  public Number3() {
 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 sizeOfCircle = getNumber("circle diameter");
 41      // ESTABLISH THE PAINTER
 42      int height = nrOfRows * sizeOfCircle;
 43      int width = nrOfColumns * sizeOfCircle;
 44      SPainter miro = new SPainter("Number 3",width+50,height+50);
 45      SCircle circle = new SCircle(sizeOfCircle/2.0);
 46      // PAINT THE RECTANGLE
 47      paintRectangle(miro,circle,nrOfRows,nrOfColumns);
 48  }
 49  
 50  private static int getNumber(String prompt) {
 51  String nss = JOptionPane.showInputDialog(null,prompt+"?");
 52  Scanner scanner = new Scanner(nss);
 53  return scanner.nextInt();
 54  }
 55  
 56  private static void paintRectangle(SPainter miro, SCircle circle,
 57  
 58          int nrOfRows, int nrOfColumns) {
 59      // POSITION THE PAINTER TO PAINT THE RECTANGLES
 60      miro.mlt(((nrOfColumns-1)/2.0) * circle.diameter());
 61      miro.mbk(((nrOfRows-1)/2.0) * circle.diameter());
 62      
 63      // PAINT THE RECTANGLES
 64      int i = 1;
 65      while ( i <= nrOfRows) {
 66          paintOneRow(miro,nrOfColumns,circle);
 67          miro.mfd(circle.diameter());
 68          i=i+1;
 69      }
 70      // MAKE THE METHOD INVARIANT WITH RESPECT TO PAINTER POSITION
 71      miro.mrt(((nrOfColumns-1)/2.0) * circle.diameter());
 72      miro.mfd(((nrOfRows-1)/2.0) * circle.diameter());
 73  }
 74  
 75  private static void paintOneRow(SPainter miro, int nrOfColumns, SCircle circle) {
 76      int i = 1;
 77      while ( i <= nrOfColumns ) {
 78          paintOneCircle(miro,circle);
 79          miro.mrt(circle.diameter());
 80          i=i+1;
 81      }
 82      miro.mlt(nrOfColumns*circle.diameter());
 83  }
 84  
 85  private static void paintOneCircle(SPainter miro, SCircle circle) {
 86      circle.s2();
 87      miro.setColor(randomColor());
 88      miro.paint(circle);
 89      circle.x2();
 90  }
 91  
 92  private static Color randomColor() {
 93      Random rgen = new Random();
 94      int r = rgen.nextInt(256);
 95      int g = rgen.nextInt(256);
 96      int b = rgen.nextInt(256);
 97      return new Color(r,b,g);
 98  }
 99  }