KanizsaSquare.java
1    /* 
2     * Program to paint a series of circles and a square to solve the Kanizsa Square problem 
3     * in the context of the Nonrepresentational Painting World (NPW). 
4     */
5    
6    package npw;
7    
8    import painter.SPainter;
9    import shapes.SCircle;
10   import shapes.SSquare;
11   
12   import javax.swing.*;
13   import java.awt.*;
14   
15   public class KanizsaSquare {
16   
17       //THE SOLUTION TO THE KANIZSA SQUARE PROBLEM
18       private void paintTheImage() {
19           SPainter painter = new SPainter("Kanizsa Square",400,400);
20   
21           SCircle dot = new SCircle(75);
22           paintBlueCircle(painter, dot);
23           paintRedCircle(painter, dot);
24           paintGreenCircles(painter, dot);
25   
26           SSquare square = new SSquare(200);
27           paintWhiteSquare(painter, square);
28       }
29   
30       //REQUIRED INFRASTRUCTURE
31       public KanizsaSquare() {
32           paintTheImage();
33       }
34   
35       public static void main(String[] args) {
36           SwingUtilities.invokeLater(new Runnable() {
37               public void run() {
38                   new KanizsaSquare();
39               }
40           });
41       }
42   
43       //Paints top left blue circle
44       private void paintBlueCircle(SPainter painter, SCircle dot) {
45           painter.setColor(Color.BLUE);
46           painter.mlt(100); //move painter left 100 pixels
47           painter.mfd(100); //move painter up 100 pixels
48           painter.paint(dot);
49           painter.mrt(100); //move painter right 100 pixels for invariance
50           painter.mbk(100); //move painter down 100 pixels for invariance
51       }
52   
53       //Paints bottom right red circle
54       private void paintRedCircle(SPainter painter, SCircle dot) {
55           painter.setColor(Color.RED);
56           painter.mrt(100); //move painter right 100 pixels
57           painter.mbk(100); //move painter down 100 pixels
58           painter.paint(dot);
59           painter.mlt(100); //move painter left 100 pixels for invariance
60           painter.mfd(100); //move painter up 100 pixels for invariance
61       }
62   
63       //Paints top right & bottom left green circles
64       private void paintGreenCircles(SPainter painter, SCircle dot) {
65           //Paints top right green circle
66           painter.setColor(Color.GREEN);
67           painter.mrt(100); //move painter right 100 pixels
68           painter.mfd(100); //move painter up 100 pixels
69           painter.paint(dot);
70           painter.mlt(100); //move painter left 100 pixels for invariance
71           painter.mbk(100); //move painter down 100 pixels for invariance
72   
73           //Paints bottom left green circle
74           painter.mlt(100); //move painter left 100 pixels
75           painter.mbk(100); //move painter down 100 pixels
76           painter.paint(dot);
77           painter.mrt(100); //move painter right 100 pixels for invariance
78           painter.mfd(100); //move painter up 100 pixels for invariance
79       }
80   
81       //Paints the white square, is last in the sequence so square appears on top of circles
82       private void paintWhiteSquare(SPainter painter, SSquare square) {
83           painter.setColor(Color.WHITE);
84           painter.paint(square);
85       }
86   }
87