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