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