/home/jfernan6/NetBeansProjects/CSX/src/npw/Number4.java
  1  /*
  2   *Program to paint red, green, blue  or black circles each spaced evenly.
  3   */
  4   package npw;
  5   import java.awt.Color;
  6   import java.util.Scanner;
  7   import javax.swing.JOptionPane;
  8   import javax.swing.SwingUtilities;
  9   import painter.SPainter;
 10   import shapes.SCircle;
 11   /**
 12   *
 13   *@author jfernan6
 14   */
 15   public class Number4 {
 16       // REQUIRED INFRASTRUCTURE
 17   /**
 18   *@param args the command line arguments
 19   */
 20   public static void main(String[] args) {
 21       SwingUtilities.invokeLater(new Runnable() {
 22           public void run() {
 23               new Number4();
 24           }
 25       });
 26   }
 27   
 28   public Number4() {
 29       paintTheImage();
 30   }
 31   
 32   // THE SOLUTION TO THE GRAPICAL PROBLEM
 33   
 34   private void paintTheImage() {
 35       // GRAB THE INPUT INFORMATION
 36       int nrOfRows = getNumber("rows");
 37       int nrOfColumns = getNumber("columns");
 38       int sizeOfCircle = getNumber("circle diameter");
 39       String color = getColor("color");
 40       // ESTABLISH THE PAINTER
 41       int height = nrOfRows * sizeOfCircle;
 42       int width = nrOfColumns * sizeOfCircle;
 43      SPainter miro = new SPainter("Number 4",width+50,height+50);
 44       SCircle circle = new SCircle(sizeOfCircle/2.0);
 45       // PAINT THE RECTANGLE
 46       paintRectangle(miro,circle,nrOfRows,nrOfColumns,color);
 47   }
 48   private static int getNumber(String prompt) {
 49   String nss = JOptionPane.showInputDialog(null,prompt+"?");
 50   Scanner scanner = new Scanner(nss);
 51   return scanner.nextInt();
 52   }
 53  
 54   private static String getColor(String prompt) {
 55   String nss = JOptionPane.showInputDialog(null,prompt+"?");
 56   Scanner scanner = new Scanner(nss);
 57   return scanner.next();
 58   }
 59   
 60   private static void paintRectangle(SPainter miro, SCircle circle,
 61       int nrOfRows, int nrOfColumns, String color) {
 62     
 63       // POSITION THE PAINTER TO PAINT THE RECTANGLES
 64       miro.mlt(((nrOfColumns-1)/2.0) * circle.diameter());
 65       miro.mbk(((nrOfRows-1)/2.0) * circle.diameter());
 66      
 67       if(color.equalsIgnoreCase("red")){
 68           miro.setColor(Color.red);
 69       } else if(color.equalsIgnoreCase("blue")){
 70           miro.setColor(Color.blue);
 71       } else if(color.equalsIgnoreCase("green")){
 72           miro.setColor(Color.green);
 73       } else {
 74           miro.setColor(Color.black);
 75       }
 76       // PAINT THE RECTANGLE
 77       int i = 1;
 78       while ( i <= nrOfRows) {
 79           paintOneRow(miro,nrOfColumns,circle);
 80           miro.mfd(circle.diameter());
 81           i=i+1;
 82       }
 83       // MAKE THE METHOD INVARIANT WITH RESPECT TO PAINTER POSITION
 84       miro.mrt(((nrOfColumns-1)/2.0) * circle.diameter());
 85       miro.mfd(((nrOfRows-1)/2.0) * circle.diameter());
 86   }
 87   
 88   private static void paintOneRow(SPainter miro, int nrOfColumns, SCircle circle) {
 89       int i = 1;
 90       while ( i <= nrOfColumns ) {
 91           paintOneCircle(miro,circle);
 92           miro.mrt(circle.diameter());
 93           i=i+1;
 94       }
 95       miro.mlt(nrOfColumns*circle.diameter());
 96   }
 97   
 98   private static void paintOneCircle(SPainter miro, SCircle circle) {
 99       circle.s2();
100       miro.paint(circle);
101       circle.x2();
102  }
103  
104  }