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