/home/jfernan6/NetBeansProjects/CSX/src/npw/Number2.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.SSquare;
13  /**
14  *
15  *@author jfernan6
16  */
17  public class Number2 {
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 Number2();
26          }
27      });
28  }
29  
30  public Number2() {
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 sizeOfSquare = getNumber("square side length");
41      // ESTABLISH THE PAINTER
42      int height = nrOfRows * sizeOfSquare;
43      int width = nrOfColumns * sizeOfSquare;
44      SPainter miro = new SPainter("Number 2",width+50,height+50);
45      miro.setBrushWidth(4);
46      SSquare square = new SSquare(sizeOfSquare);
47      // PAINT THE RECTANGLES
48      paintRectangle(miro,square,nrOfRows,nrOfColumns);
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  private static void paintRectangle(SPainter miro, SSquare square,
56      int nrOfRows, int nrOfColumns) {
57      // POSITION THE PAINTER TO PAINT THE RECTANGLE OF SQUARES
58      miro.mlt(((nrOfColumns-1)/2.0) * square.side());
59      miro.mbk(((nrOfRows-1)/2.0) * square.side());
60      // PAINT THE RECTANGLE OF SQUARES
61      int i = 1;
62      while ( i <= nrOfRows) {
63          paintOneRow(miro,nrOfColumns,square);
64          miro.mfd(square.side());
65          i=i+1;
66      }
67      // MAKE THE METHOD INVARIANT WITH RESPECT TO PAINTER POSITION
68      miro.mrt(((nrOfColumns-1)/2.0) * square.side());
69      miro.mfd(((nrOfRows-1)/2.0) * square.side());
70  }
71  
72  private static void paintOneRow(SPainter miro, int nrOfColumns, SSquare square) {
73      int i = 1;
74      while ( i <= nrOfColumns ) {
75          paintOneSquare(miro,square);
76          miro.mrt(square.side());
77          i=i+1;
78      }
79      miro.mlt(nrOfColumns*square.side());
80  }
81  
82  private static void paintOneSquare(SPainter miro, SSquare square) {
83      square.s2();
84      miro.setColor(randomColor());
85      miro.paint(square);
86      miro.setColor(Color.BLACK);
87      miro.draw(square);
88      square.x2();
89  }
90  
91  private static Color randomColor() {
92      Random rgen = new Random();
93      int r = rgen.nextInt(256);
94      int g = rgen.nextInt(256);
95      int b = rgen.nextInt(256);
96      return new Color(r,b,g);
97  }
98  }