Stella.java
1    package npw;
2    
3    import painter.SPainter;
4    import shapes.SSquare;
5    
6    import javax.swing.*;
7    import java.awt.*;
8    import java.util.Random;
9    import java.util.Scanner;
10   
11   import static javax.swing.SwingUtilities.*;
12   
13   public class Stella {
14   
15   
16       private Stella() {
17           paintCanvas();
18       }
19   
20       public static void main(String[] args) {
21           invokeLater( Stella::new );
22       }
23   
24       private void paintCanvas() {
25           int squareCount = getNumber( "How Many Squares to Draw" );
26           int canvasSize = 800;
27           int squareSide = canvasSize - 100; // Square Size Constraint
28           int smallerFactor = squareSide / squareCount;
29   
30           SPainter painter = new SPainter( "Stella", canvasSize, canvasSize );
31           SSquare square = new SSquare( squareSide );
32   
33           drawSquare( painter, squareCount, smallerFactor, square );
34       }
35   
36       private void drawSquare(SPainter painter, int nrOfSquares, int shrinkFactor, SSquare square) {
37           boolean DifCol = true;
38           Color randomColor1 = randomColor();
39           Color randomColor2 = randomColor();
40   
41           for (int i = 0; i < nrOfSquares; i++) {
42               if (DifCol == true) {
43                   painter.setColor( randomColor1 );
44                   painter.paint( square );
45                   square.shrink( shrinkFactor );
46                   DifCol = false;
47               } else {
48                   painter.setColor( randomColor2 );
49                   painter.paint( square );
50                   square.shrink( shrinkFactor );
51                   DifCol = true;
52               }
53           }
54       }
55       private Color randomColor() {
56           Random rgen = new Random();
57           int r = rgen.nextInt( 255 );
58           int g = rgen.nextInt( 255 );
59           int b = rgen.nextInt( 255 );
60           return new Color( r, g, b );
61       }
62       private static int getNumber(String prompt) {
63           String nss = JOptionPane.showInputDialog( null, prompt + "?" );
64           Scanner scanner = new Scanner( nss );
65           return scanner.nextInt();
66       }
67   }