/home/ffrigin/NetBeansProjects/CS1/src/npw/Number3.java
  1 /*
  2 *Program to paint small dots, centered in the canvas, made up of randomly
  3 *colored.
  4  */
  5 package npw;
  6 
  7 import java.awt.Color;
  8 import java.util.Random;
  9 import java.util.Scanner;
 10 import javax.swing.JOptionPane;
 11 import javax.swing.SwingUtilities;
 12 import painter.SPainter;
 13 import shapes.SCircle;
 14 
 15 /**
 16  *
 17  * @author ffrigin
 18  */
 19 public class Number3 {
 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 Number3();
 29             }
 30         });
 31     }
 32 
 33     public Number3() {
 34         paintTheImage();
 35     }
 36 // THE SOLUTION TO THE GRAPICAL PROBLEM
 37 
 38     private void paintTheImage() {
 39 // GRAB THE INPUT INFORMATION
 40         int nrOfRows = getNumber("rows");
 41         int nrOfColumns = getNumber("columns");
 42         int sizeOfCircle = getNumber("Circle radius length");
 43 // ESTABLISH THE PAINTER
 44         int height = nrOfRows * sizeOfCircle;
 45         int width = nrOfColumns * sizeOfCircle;
 46         SPainter miro = new SPainter("Number 3", width + 50, height + 50);
 47         miro.setBrushWidth(4);
 48         SCircle circle = new SCircle(sizeOfCircle);
 49 // PAINT THE RECTANGLES
 50         paintCircle(miro, circle, nrOfRows, nrOfColumns);
 51     }
 52 
 53     private static int getNumber(String prompt) {
 54         String nss = JOptionPane.showInputDialog(null, prompt + "?");
 55         Scanner scanner = new Scanner(nss);
 56         return scanner.nextInt();
 57     }
 58 
 59     private static void paintCircle(SPainter miro, SCircle circle,
 60             int nrOfRows, int nrOfColumns) {
 61 // POSITION THE PAINTER TO PAINT THE RECTANGLE OF CIRCLES
 62         miro.mlt(((nrOfColumns - 1) / 2.0) * circle.radius());
 63         miro.mbk(((nrOfRows - 1) / 2.0) * circle.radius());
 64 // PAINT THE RECTANGLE OF CIRCLES
 65         int i = 1;
 66         while (i <= nrOfRows) {
 67             paintOneRow(miro, nrOfColumns, circle);
 68             miro.mfd(circle.radius());
 69             i = i + 1;
 70         }
 71 // MAKE THE METHOD INVARIANT WITH RESPECT TO PAINTER POSITION
 72         miro.mrt(((nrOfColumns - 1) / 2.0) * circle.radius());
 73         miro.mfd(((nrOfRows - 1) / 2.0) * circle.radius());
 74     }
 75 
 76     private static void paintOneRow(SPainter miro, int nrOfColumns, SCircle circle) {
 77         int i = 1;
 78         while (i <= nrOfColumns) {
 79             paintOneCircle(miro, circle);
 80             miro.mrt(circle.radius());
 81             i = i + 1;
 82         }
 83         miro.mlt(nrOfColumns * circle.radius());
 84     }
 85 
 86     private static void paintOneCircle(SPainter miro, SCircle circle) {
 87         circle.s3();
 88         miro.setColor(randomColor());
 89         miro.paint(circle);
 90         circle.x3();
 91     }
 92 
 93     private static Color randomColor() {
 94         Random rgen = new Random();
 95         int r = rgen.nextInt(256);
 96         int g = rgen.nextInt(256);
 97         int b = rgen.nextInt(256);
 98         return new Color(r, b, g);
 99     }
100 }
101