1 package npw; 2 3 import java.awt.Color; 4 import javax.swing.SwingUtilities; 5 6 import painter.SPainter; 7 import shapes.SCircle; 8 import shapes.SSquare; 9 10 public class KanizsaSquare { 11 //The Solution to the KanizaSquare problem 12 private void paintTheImage() { 13 SPainter Jeremi = new SPainter("Kanizsa Square",400,400); 14 SCircle dot = new SCircle(75); 15 paintBlueCircle(Jeremi, dot); 16 paintRedCircle(Jeremi, dot); 17 paintGreenCircles(Jeremi, dot); 18 19 SSquare square = new SSquare(200); 20 paintWhiteSquare(Jeremi, square); 21 22 } 23 24 private void paintWhiteSquare(SPainter jeremi, SSquare square) { 25 //White circle is made last 26 SSquare White1 = new SSquare(200); 27 jeremi.setColor(Color.WHITE); 28 jeremi.paint(White1); 29 } 30 private void paintGreenCircles(SPainter jeremi, SCircle dot) { 31 //You messed up by making the methods out of order 32 // Green circle is made after RED Circle so if you don't make RED invariant it messes it up 33 jeremi.mrt(100); 34 jeremi.mfd(100); 35 SCircle Green1 = new SCircle(75); 36 jeremi.setColor(Color.GREEN); 37 jeremi.paint(Green1); 38 //Practice invariance by doing the opposite operation or everything is messed up 39 jeremi.mlt(100); 40 jeremi.mbk(100); 41 42 SCircle Green2 = new SCircle(75); 43 jeremi.setColor(Color.GREEN); 44 jeremi.mlt(100); 45 jeremi.mbk(100); 46 jeremi.paint(Green2); 47 jeremi.mrt(100); 48 jeremi.mfd(100); 49 50 } 51 52 private void paintRedCircle(SPainter jeremi, SCircle dot) { 53 //RED is made second 54 SCircle Red1 = new SCircle(75); 55 jeremi.setColor(Color.RED); 56 jeremi.mrt(100); 57 jeremi.mbk(100); 58 jeremi.paint(Red1); 59 jeremi.mlt(100); 60 jeremi.mfd(100); 61 62 } 63 64 private void paintBlueCircle(SPainter jeremi, SCircle dot) { 65 //Blue is made first 66 jeremi.mlt(100); 67 jeremi.mfd(100); 68 SCircle Blue1 = new SCircle(75); 69 jeremi.setColor(Color.BLUE); 70 jeremi.paint(dot); 71 jeremi.mrt(100); 72 jeremi.mbk(100); 73 } 74 75 //Required infrastructure 76 public KanizsaSquare() { 77 paintTheImage(); 78 } 79 public static void main (String[] args) { 80 SwingUtilities.invokeLater(new Runnable() { 81 public void run(){ 82 new KanizsaSquare(); 83 } 84 }); 85 } 86 } 87