1 /* 2 *This program makes Hirst Dots, it's very similar to Number 2 but instead the squares are circles... 3 * Also the circles are outlined... 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.SCircle; 13 14 public class Number3 { 15 //Solution to the graphical problem. 16 private void paintTheImage() { 17 //Get the input info from the user. 18 int numOfRows = getNumber("rows"); 19 int numOfColumns = getNumber("columns"); 20 int sizeOfCircle = getNumber("circle side length"); 21 //Establishing the painter. 22 int height = numOfRows * sizeOfCircle; 23 int width = numOfColumns * sizeOfCircle; 24 SPainter leo = new SPainter("Number 3",width+50,height+50); 25 leo.setBrushWidth(4); 26 SCircle circle = new SCircle(sizeOfCircle); 27 paintCircle(leo,circle,numOfRows,numOfColumns); 28 } 29 30 private int getNumber(String prompt) { 31 String nss = JOptionPane.showInputDialog(null,prompt+"?"); 32 Scanner scan = new Scanner(nss); 33 return scan.nextInt(); 34 } 35 private void paintCircle(SPainter leo, SCircle circle, int numOfRows, int numOfColumns) { 36 //Position the painter to paint the rectangle of squares. 37 leo.mlt(((numOfColumns-1)/2.0)*circle.radius()); 38 leo.mbk(((numOfRows-1)/2.0)*circle.radius()); 39 //Paint the rectangle of circles. 40 int i = 1; 41 while (i <= numOfRows) { 42 paintOneRow(leo,numOfColumns,circle); 43 leo.mfd(circle.radius()); 44 i = i + 1; 45 } 46 //Used to make method invariant with respect to painter position. 47 leo.mrt(((numOfColumns-1)/2.0)*circle.radius()); 48 leo.mfd(((numOfColumns-1)/2.0)*circle.radius()); 49 } 50 51 private void paintOneRow(SPainter leo, int numOfColumns, SCircle circle) { 52 int i = 1; 53 while (i <= numOfColumns) { 54 paintOneCircle(leo,circle); 55 leo.mrt(circle.radius()); 56 i = i + 1; 57 } 58 //invariant 59 leo.mlt(numOfColumns*circle.radius()); 60 } 61 62 private void paintOneCircle(SPainter leo, SCircle circle) { 63 circle.setRadius(((int) circle.radius())/4); 64 leo.setColor(randomColor()); 65 leo.paint(circle); 66 circle.setRadius(((int) circle.radius())*4); 67 68 69 70 } 71 72 private Color randomColor() { 73 Random randomGenerator = new Random(); 74 int r = randomGenerator.nextInt(256); 75 int g = randomGenerator.nextInt(256); 76 int b = randomGenerator.nextInt(256); 77 return new Color(r,b,g); 78 } 79 public Number3(){ 80 paintTheImage(); 81 } 82 public static void main(String[] args){ 83 SwingUtilities.invokeLater(new Runnable() { 84 @Override 85 public void run() { 86 new Number3(); 87 } 88 }); 89 } 90 } 91