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