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   
17           SPainter painter = new SPainter("Kanizsa Square",400,400);
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       // REQUIRED INFRASTRUCTURE
27       public KanizsaSquare (){
28           paintTheImage();
29       }
30       public static void main(String[] args){
31           SwingUtilities.invokeLater(new Runnable() {
32               public void run() {
33                   new KanizsaSquare();
34               }
35           });
36       }
37       private void paintBlueCircle(SPainter painter, SCircle dot) {
38           painter.setColor(Color.BLUE);
39           painter.mfd (dot.radius());
40           painter.mlt (dot.radius());
41           painter.mfd (dot.radius()/2);
42           painter.mlt (dot.radius()/2);
43           painter.paint(dot);
44       }
45   
46       private void paintRedCircle(SPainter painter, SCircle dot) {
47           painter.setColor(Color.RED);
48           painter.moveToCenter();
49           painter.mbk(dot.radius());
50           painter.mrt (dot.radius());
51           painter.mbk (dot.radius()/2);
52           painter.mrt (dot.radius()/2);
53           painter.paint(dot);
54       }
55   
56       private void paintGreenCircles(SPainter painter, SCircle dot) {
57           painter.setColor(Color.GREEN);
58           painter.moveToCenter();
59           painter.mbk(dot.radius());
60           painter.mlt(dot.radius());
61           painter.mbk (dot.radius()/2);
62           painter.mlt (dot.radius()/2);
63           painter.paint(dot);
64           painter.moveToCenter();
65           painter.mfd(dot.radius());
66           painter.mrt(dot.radius());
67           painter.mfd (dot.radius()/2);
68           painter.mrt (dot.radius()/2);
69           painter.paint(dot);
70       }
71   
72       private void paintWhiteSquare(SPainter painter, SSquare square) {
73           painter.setColor(Color.WHITE);
74           painter.moveToCenter();
75           painter.paint(square);
76       }
77   }
78