1 /* 2 * Program to paint a rectangle, centered in the canvas, made up of randomly 3 * colored, circles. 4 */ 5 6 package npw; 7 8 import java.awt.Color; 9 import java.util.Random; 10 import java.util.Scanner; 11 import javax.swing.JOptionPane; 12 import javax.swing.SwingUtilities; 13 14 import painter.SPainter; 15 import shapes.SCircle; 16 17 18 public class Number3 { 19 // The solution to the graphical problem. 20 private void paintTheImage() { 21 // Get the input information from the user. 22 int nrOfRows = getNumber("rows"); 23 int nrOfColumns = getNumber("columns"); 24 int sizeOfDiameter = getNumber("circle diameter"); 25 // Establish the painter. 26 int height = nrOfRows * sizeOfDiameter; 27 int width = nrOfColumns * sizeOfDiameter; 28 SPainter miro = new SPainter("Number 3",width+50,height+50); 29 miro.setBrushWidth(4); 30 SCircle circle = new SCircle(sizeOfDiameter / 2.0); 31 // Paint the rectangles. 32 paintRectangle(miro,circle,nrOfRows,nrOfColumns); 33 } 34 35 private static int getNumber(String prompt) { 36 String nss = JOptionPane.showInputDialog(null,prompt+"?"); 37 Scanner scanner = new Scanner(nss); 38 return scanner.nextInt(); 39 } 40 41 private static void paintRectangle(SPainter miro, SCircle circle, 42 int nrOfRows, int nrOfColumns) { 43 // Position the painter to paint the rectangle of circles. 44 miro.mlt(((nrOfColumns-1)/2.0) * circle.diameter()); 45 miro.mbk(((nrOfRows-1)/2.0) * circle.diameter()); 46 // Paint the rectangle of circles. 47 int i = 1; 48 while ( i <= nrOfRows) { 49 paintOneRow(miro,nrOfColumns,circle); 50 miro.mfd(circle.diameter()); 51 i = i + 1; 52 } 53 // Make the method invariant with respect to painter position. 54 miro.mrt(((nrOfColumns-1)/2.0) * circle.diameter()); 55 miro.mfd(((nrOfRows-1)/2.0) * circle.diameter()); 56 } 57 58 private static void paintOneRow(SPainter miro, int nrOfColumns, SCircle circle) { 59 int i = 1; 60 while ( i <= nrOfColumns ) { 61 paintOneCircle(miro,circle); 62 miro.mrt(circle.diameter()); 63 i = i + 1; 64 } 65 miro.mlt(nrOfColumns*circle.diameter()); 66 } 67 68 private static void paintOneCircle(SPainter miro, SCircle circle) { 69 circle.s2(); 70 miro.setColor(randomColor()); 71 miro.paint(circle); 72 circle.x2(); 73 } 74 private static Color randomColor() { 75 Random rgen = new Random(); 76 int r = rgen.nextInt(256); 77 int g = rgen.nextInt(256); 78 int b = rgen.nextInt(256); 79 return new Color(r,b,g); 80 } 81 82 public Number3(){ 83 paintTheImage(); 84 } 85 86 public static void main(String[] args){ 87 SwingUtilities.invokeLater(new Runnable() { 88 @Override 89 public void run() { 90 new Number3(); 91 } 92 }); 93 } 94 }