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