KanizsaSquare.java
1    /* 
2     * Program a Kanizsa Square, Npw. 
3     */
4    
5    package npw;
6    
7    import painter.SPainter;
8    import shapes.SCircle;
9    import shapes.SSquare;
10   
11   import javax.swing.*;
12   import java.awt.*;
13   
14   public class KanizsaSquare {
15   
16       // THE SOLUTION TO THE Kanizsa Square PROBLEM
17       private void paintTheImage() {
18           SPainter klue = new SPainter("Kanizsa Square",400,400);
19   
20           SCircle dot = new SCircle(75);
21           paintBlueCircle(klue, dot);
22           paintRedCircle(klue, dot);
23           paintGreenCircles(klue, dot);
24   
25           SSquare square = new SSquare(200);
26           paintWhiteSquare(klue, square);
27       }
28   
29       private void paintWhiteSquare(SPainter klue, SSquare square) {
30           klue.setColor(Color.white );
31           klue.paint(square);
32       }
33   
34       private void paintGreenCircles(SPainter klue, SCircle dot) {
35           klue.mbk(100);
36           klue.mlt(100);
37           klue.setColor(Color.green);
38           klue.paint(dot);
39           //invariant
40           klue.moveToCenter();
41           //same green dot
42           klue.mfd(100);
43           klue.mrt(100);
44           klue.setColor(Color.green);
45           klue.paint(dot);
46           //invariant
47           klue.moveToCenter();
48       }
49   
50       private void paintRedCircle(SPainter klue, SCircle dot) {
51           klue.mrt(100);
52           klue.mbk(100);
53           klue.setColor(Color.RED);
54           klue.paint(dot);
55           //invariant
56           klue.mlt(100);
57           klue.mfd(100);
58       }
59   
60       private void paintBlueCircle(SPainter klue, SCircle dot) {
61           klue.mlt(100);
62           klue.mfd(100);
63           klue.setColor(Color.BLUE);
64           klue.paint(dot);
65           //invariant
66           klue.mrt(100);
67           klue.mbk(100);
68       }
69   
70       //REQUIRED INFRASTRUCTURE
71       public KanizsaSquare() {
72           paintTheImage();
73       }
74   
75       public static void main(String[] args) {
76           SwingUtilities.invokeLater(new Runnable() {
77               public void run() {
78                   new KanizsaSquare();
79               }
80           });
81       }
82   }