package npw; import java.awt.*; import java.util.Random; import java.util.Scanner; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; import painter.SPainter; import shapes.SCircle; public class Number3 { private void paintTheImage() { int nrOfRows = getNumber("rows"); int nrOfColumns = getNumber("columns"); int diameterOfCircle = getNumber("diameter of circle"); //establish the painter int height = nrOfRows * diameterOfCircle; int width = nrOfColumns * diameterOfCircle; SPainter miro = new SPainter("Number 3", width + 50, height + 50); miro.setBrushWidth(4); SCircle circle = new SCircle(diameterOfCircle / 2); //paint the rectangles paintRectangle(miro, circle, nrOfRows, nrOfColumns); } private static int getNumber(String prompt){ String nss = JOptionPane.showInputDialog(null, prompt + "?"); Scanner scanner = new Scanner(nss); return scanner.nextInt(); } private static void paintRectangle(SPainter miro, SCircle circle, int nrOfRows, int nrOfColumns){ //position the painter to paint the rectangle of squares. miro.mlt(((nrOfColumns - 1) / 2.0) * circle.diameter()); miro.mbk(((nrOfRows - 1) / 2.0) * circle.diameter()); //paint the rectangle of squares int i = 1; while ( i <= nrOfRows ){ paintOneRow(miro, nrOfColumns, circle); miro.mfd(circle.diameter()); i = i + 1; } //make the method invariant with respect to painter position miro.mrt(((nrOfColumns - 1) / 2.0) * circle.diameter()); miro.mfd(((nrOfRows - 1 ) / 2.0) * circle.diameter()); } private static void paintOneRow(SPainter miro, int nrOfColumns, SCircle circle){ int i = 1; while( i <= nrOfColumns){ paintOneCircle(miro, circle); miro.mrt(circle.diameter()); i = i +1; } miro.mlt(nrOfColumns * circle.diameter()); } private static void paintOneCircle(SPainter miro, SCircle circle){ circle.s2(); miro.setColor(randomColor()); miro.paint(circle); circle.x2(); } private static Color randomColor(){ Random rgen = new Random(); int r = rgen.nextInt(256); int g = rgen.nextInt(256); int b = rgen.nextInt(256); return new Color (r, b ,g); } public Number3(){ paintTheImage(); } public static void main(String[] args){ SwingUtilities.invokeLater(new Runnable(){ @Override public void run() { new npw.Number3(); } }); } }