1 /* 2 * Program to paint a rectangle, centered in the canvas, made up of randomly 3 * colored, black framed squares that are spaced. 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.SSquare; 16 17 public class Number2 { 18 // The solution to the graphical problem. 19 private void paintTheImage() { 20 // Get the input information fron the user. 21 int nrOfRows = getNumber("rows"); 22 int nrOfColumns = getNumber("columns"); 23 int sizeOfSquare = getNumber("square side length"); 24 // Establish the painter. 25 int height = nrOfRows * sizeOfSquare; 26 int width = nrOfColumns * sizeOfSquare; 27 SPainter miro = new SPainter("Number 2",width+50,height+50); 28 miro.setBrushWidth(4); 29 SSquare square = new SSquare(sizeOfSquare); 30 // Paint the rectangles. 31 paintRectangle(miro,square,nrOfRows,nrOfColumns); 32 } 33 34 private static int getNumber(String prompt) { 35 String nss = JOptionPane.showInputDialog(null,prompt+"?"); 36 Scanner scanner = new Scanner(nss); 37 return scanner.nextInt(); 38 } 39 40 private static void paintRectangle(SPainter miro, SSquare square, 41 int nrOfRows, int nrOfColumns) { 42 // Position the painter to paint the rectangle of squares. 43 miro.mlt(((nrOfColumns-1)/2.0) * square.side()); 44 miro.mbk(((nrOfRows-1)/2.0) * square.side()); 45 // Paint the rectangle of squares. 46 int i = 1; 47 while ( i <= nrOfRows) { 48 paintOneRow(miro,nrOfColumns,square); 49 miro.mfd(square.side()); 50 i = i + 1; 51 } 52 // Make the method invariant with respect to painter position. 53 miro.mrt(((nrOfColumns-1)/2.0) * square.side()); 54 miro.mfd(((nrOfRows-1)/2.0) * square.side()); 55 } 56 57 private static void paintOneRow(SPainter miro, int nrOfColumns, SSquare square) { 58 int i = 1; 59 while ( i <= nrOfColumns ) { 60 paintOneSquare(miro,square); 61 miro.mrt(square.side()); 62 i = i + 1; 63 } 64 miro.mlt(nrOfColumns*square.side()); 65 } 66 67 private static void paintOneSquare(SPainter miro, SSquare square) { 68 miro.setColor(randomColor()); 69 square.s2(); 70 miro.paint(square); 71 miro.setColor(Color.BLACK); 72 miro.draw(square); 73 square.x2(); 74 } 75 private static Color randomColor() { 76 Random rgen = new Random(); 77 int r = rgen.nextInt(256); 78 int g = rgen.nextInt(256); 79 int b = rgen.nextInt(256); 80 return new Color(r,b,g); 81 } 82 83 public Number2(){ 84 paintTheImage(); 85 } 86 87 public static void main(String[] args){ 88 SwingUtilities.invokeLater(new Runnable() { 89 @Override 90 public void run() { 91 new Number2(); 92 } 93 }); 94 } 95 } 96