package npw; import java.awt.Color; import java.util.Scanner; import javax.swing.JOptionPane; import javax.swing.SwingUtilities; import painter.SPainter; import shapes.SCircle; public class Number4 { //Solution to the graphical problem. private void paintTheImage() { //Get the input info from the user. int numOfRows = getNumber("rows"); int numOfColumns = getNumber("columns"); int sizeOfCircle = getNumber("circle side length"); String whatColor = getColor("Choose the color of dots| Green, Blue and, Red"); //Establishing the painter. int height = numOfRows * sizeOfCircle; int width = numOfColumns * sizeOfCircle; SPainter miro = new SPainter("Number 4",width+50,height+50); miro.setBrushWidth(4); SCircle circle = new SCircle(sizeOfCircle); //paint the rectangles paintCircle(miro,circle,numOfRows,numOfColumns, whatColor); } private String getColor(String prompt) { String nss = JOptionPane.showInputDialog(null,prompt+"?"); Scanner color = new Scanner(nss); return color.nextLine(); } private int getNumber(String prompt) { String nss = JOptionPane.showInputDialog(null,prompt+"?"); Scanner scan = new Scanner(nss); return scan.nextInt(); } private void paintCircle(SPainter miro, SCircle circle, int numOfRows, int numOfColumns, String whatColor) { //Position the painter to paint the rectangle of circles. miro.mlt(((numOfColumns-1)/2.0)*circle.radius()); miro.mbk(((numOfRows-1)/2.0)*circle.radius()); //Paint the rectangle of circles. int i = 1; while (i <= numOfRows) { paintOneRow(miro,numOfColumns,circle, whatColor); miro.mfd(circle.radius()); i = i + 1; } //Used to make method invariant with respect to painter position. miro.mrt(((numOfColumns-1)/2.0)*circle.radius()); miro.mfd(((numOfColumns-1)/2.0)*circle.radius()); } private void paintOneRow(SPainter miro, int numOfColumns, SCircle circle, String whatColor) { int i = 1; while (i <= numOfColumns) { paintOneCircle(miro,circle, whatColor); miro.mrt(circle.radius()); i = i + 1; } //invariant miro.mlt(numOfColumns*circle.radius()); } private void paintOneCircle(SPainter miro, SCircle circle, String whatColor) { circle.setRadius(((int) circle.radius())/4); if (whatColor.equalsIgnoreCase("green")) { miro.setColor(Color.GREEN); } else if (whatColor.equalsIgnoreCase("red")) { miro.setColor(Color.RED); } else if (whatColor.equalsIgnoreCase("blue")) { miro.setColor(Color.BLUE); } else { miro.setColor(Color.BLACK); } miro.paint(circle); circle.setRadius(((int) circle.radius())*4); } public Number4(){ paintTheImage(); } public static void main(String[] args){ SwingUtilities.invokeLater(new Runnable() { @Override public void run() { new Number4(); } }); } }