SimpleDots.java
1    package npw;
2    
3    import painter.SPainter;
4    import shapes.SCircle;
5    
6    import javax.swing.*;
7    import java.awt.*;
8    import java.util.Random;
9    import java.util.Scanner;
10   
11   public class SimpleDots {
12       public static void main(String[] args) {
13           SwingUtilities.invokeLater(SimpleDots::new);
14       }
15       public SimpleDots() {
16           paintTheImage();
17       }
18       private void paintTheImage(){
19           // Grab the input information
20           int width = getNumber("width");
21           int height = getNumber("height");
22           int dotHorizontalSpace = getNumber("horizontal space between dots");
23           int dotVerticalSpace = getNumber("vertical space between dots");
24           Color color = getColor("red or blue or green");
25   
26           SPainter painter = new SPainter("Hirst Dots", width, height);
27           SCircle dot = new SCircle(5);
28           // Move the painter to the upper left corner to get ready to paint the gradient
29           painter.mfd(height/2.0);
30           painter.tl();
31           painter.mfd(width/2.0);
32           painter.tl();
33           // Paint it!
34           paintGradient(painter, dot, height, width, dotHorizontalSpace, dotVerticalSpace, color);
35       }
36       private static int getNumber(String prompt) {
37           String nss = JOptionPane.showInputDialog(null,prompt+"?");
38           Scanner scanner = new Scanner(nss);
39           return  scanner.nextInt();
40       }
41       private static Color getColor(String redOrBlueOrGreen) {
42           String nss = JOptionPane.showInputDialog(null,redOrBlueOrGreen+"?");
43           Color color = null;
44           if (nss.equalsIgnoreCase("red")){ color = Color.RED;}
45           else if (nss.equalsIgnoreCase("blue")){ color = Color.BLUE;}
46           else if (nss.equalsIgnoreCase("green")){ color = Color.GREEN;}
47           else { color = Color.BLACK;}
48           return  color;
49       }
50   
51   
52   
53       private void paintGradient(SPainter painter, SCircle dot, int height, int width, int dotHorizontalSpace, int dotVerticalSpace, Color color){
54           double colWidth = dot.diameter() + dotHorizontalSpace;
55           int nrOfCols = (int) Math.floor((width / colWidth)) - 1;
56           int cols = 0;
57           while (cols < nrOfCols){
58               nextCol(painter, dot, dotHorizontalSpace);
59               paintColumn(painter, dot, height, dotVerticalSpace, color);
60               cols = cols + 1;
61           }
62       }
63       private void  paintOneDot(SPainter painter, SCircle dot, Color color){
64           painter.setColor(color);
65           painter.paint(dot);
66       }
67       private void paintColumn(SPainter painter, SCircle dot, int height, int dotVerticalSpace, Color color) {
68           double totalDistanceTraveled = 0;
69           while (totalDistanceTraveled < (height - (2*(dot.diameter() + dotVerticalSpace)))){
70               double travel = dot.diameter() + dotVerticalSpace;
71               totalDistanceTraveled = totalDistanceTraveled + travel;
72               painter.mfd(travel);
73               paintOneDot(painter, dot, color);
74           }
75           // Make the method invariant with respect to painter position.
76           painter.mbk(totalDistanceTraveled);
77       }
78       // Moves the painter to the next column.
79       private void nextCol(SPainter painter, SCircle dot, int dotSpace){
80           painter.tl();
81           painter.mfd(dot.diameter() + dotSpace);
82           painter.tr();
83       }
84   
85   }
86