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