1 /* 2 * Program to paint a rectangle, centered on the canvas, made up of randomly 3 * colored, black framed squares 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 Number1 { 18 //the solution to the graphical problem 19 private void paintTheImage() { 20 //get the input information from 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("Number1",width + 50,height + 50); 28 miro.setBrushWidth(4); 29 SSquare square = new SSquare(sizeOfSquare); 30 //paint the rectangles 31 paintTheRectangle(miro,square,nrOfRows,nrOfColumns); 32 } 33 34 private 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 void paintTheRectangle(SPainter miro, SSquare square, int nrOfRows, int nrOfColumns) { 41 //position the painter to paint the rectangle of squares 42 miro.mlt(((nrOfColumns-1)/2.0) * square.side()); 43 miro.mbk(((nrOfRows-1)/2.0) * square.side()); 44 //paint the rectangle of squares 45 int i = 1; 46 while (i <= nrOfRows) { 47 paintOneRow(miro,nrOfColumns,square); 48 miro.mfd(square.side()); 49 i = i+1; 50 } 51 //make the method invariant with respect to painter position 52 miro.mrt(((nrOfColumns-1)/2.0) * square.side()); 53 miro.mfd(((nrOfRows-1)/2.0) * square.side()); 54 } 55 56 private void paintOneRow(SPainter miro, int nrOfColumns, SSquare square) { 57 int k = 1; 58 while (k <= nrOfColumns) { 59 paintOneSquare(miro,square); 60 miro.mrt(square.side()); 61 k = k+1; 62 } 63 //make the method invariant with respect to painter position 64 miro.mlt(nrOfColumns*square.side()); 65 } 66 67 private void paintOneSquare(SPainter miro, SSquare square) { 68 miro.setColor(randomColor()); 69 miro.paint(square); 70 miro.setColor(Color.BLACK); 71 miro.draw(square); 72 } 73 74 private 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 Number1() { 83 paintTheImage(); 84 } 85 public static void main(String[] args) { 86 SwingUtilities.invokeLater(new Runnable() { 87 @Override 88 public void run() { 89 new Number1(); 90 } 91 }); 92 } 93 94 } 95