KanizsaSquare.java
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