/home/mbilodea/NetBeansProjects/CS1/src/npw/Number4.java
  1 /*
  2  * Program to paint a rectangle, centered in the canvas, made up of selectively
  3  * colored, unframed hirst circles.
  4  */
  5 package npw;
  6 
  7 import java.awt.Color;
  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  *
 16  * @author mbilodea
 17  */
 18 public class Number4 {
 19     
 20     // REQUIRED INFRASTRUCTURE
 21 
 22     /**
 23      * @param args the command line arguments
 24      */
 25     public static void main(String[] args) {
 26         SwingUtilities.invokeLater(new Runnable() {
 27             public void run() {
 28                 new Number4();
 29             }
 30         });
 31     }
 32     
 33     public Number4() {
 34         paintTheImage();
 35     }
 36     
 37     // THE SOLUTION TO THE GRAPHICIAL PROBLEM
 38     
 39     private void paintTheImage() {
 40         //GRAB THE INPUT INFORMATION
 41         int nrOfRows = getNumber("rows");
 42         int nrOfColumns = getNumber("columns");
 43         int sizeOfCircle = getNumber("cicrle radius");
 44         // ESTABLISH THE PAINTER
 45         int height = nrOfRows * sizeOfCircle;
 46         int width = nrOfColumns * sizeOfCircle;
 47         SPainter micro = new SPainter("Number 4", width+50,height+50);
 48         micro.setBrushWidth(4);
 49         SCircle circle = new SCircle(sizeOfCircle);
 50         // GET COLOR FROM USER
 51         String command = JOptionPane.showInputDialog(null, "Color? (red, green, or blue)");
 52         if ( command.equalsIgnoreCase("blue") ) {
 53                 micro.setColor(Color.BLUE);
 54             } else if ( command.equalsIgnoreCase("red") ) {
 55                 micro.setColor(Color.RED);
 56             } else if ( command.equalsIgnoreCase("green") ) {
 57                 micro.setColor(Color.GREEN);
 58             } else {
 59                 micro.setColor(Color.BLACK);
 60             }
 61         // PAINT THE RECTANGLES
 62         paintRectangle(micro,circle,nrOfRows,nrOfColumns);
 63     }
 64     
 65     private static int getNumber(String prompt) {
 66         String nss = JOptionPane.showInputDialog(null,prompt+"?");
 67         Scanner scanner = new Scanner(nss);
 68         return scanner.nextInt();
 69     }
 70     
 71      private static String getColor(String prompt) {
 72         String color = JOptionPane.showInputDialog(null,prompt+"?");
 73         Scanner scanner = new Scanner(color);
 74         return color;
 75     }
 76     
 77     private static void paintRectangle(SPainter micro, SCircle circle, 
 78             int nrOfRows, int nrOfColumns) {
 79         // POSITION THE PAINTER TO PAIN THE RECTANGLE OF SQUARES
 80         micro.mlt(((nrOfColumns-1)/2.0) * circle.diameter());
 81         micro.mbk(((nrOfRows-1)/2.0) * circle.diameter());
 82         // PAINT THE RECTANGLE OF SQUARES
 83         int i = 1;
 84         while ( i <= nrOfRows) {
 85             paintOneRow(micro,nrOfColumns,circle);
 86             micro.mfd(circle.diameter());
 87             i = i + 1;
 88         }
 89         // MAKE THE METHOD INVARIANT WITH RESPECT TO PAINTER POSITION
 90         micro.mrt(((nrOfColumns-1)/2.0) * circle.diameter());
 91         micro.mfd(((nrOfRows-1)/2.0) * circle.diameter());
 92     }
 93     
 94     private static void paintOneRow(SPainter micro, int nrOfColumns, SCircle circle) {
 95         int i = 1;
 96         while ( i <= nrOfColumns ) {
 97             paintOneCircle(micro,circle);
 98             micro.mrt(circle.diameter());
 99             i = i + 1;
100         }
101         micro.mlt(nrOfColumns*circle.diameter());
102     }
103     
104     private static void paintOneCircle(SPainter micro, SCircle circle) {
105         circle.s2();
106         micro.paint(circle);
107         circle.x2();
108     }
109     
110 }