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