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