KanizsaSquareInput.java
1    /* 
2     * Program to paint a Kanizsa Square of any size, after asking for an input, 
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 KanizsaSquareInput {
16       // THE SOLUTION TO THE KANIZSA SQUARE INPUT PROBLEM
17       private void paintTheImage() {
18           //input side length
19           String answer = JOptionPane.showInputDialog(null, "Please enter square side length");
20   
21           System.out.println("Square Side Length = " + answer);
22           int sideLength=Integer.parseInt(answer);
23   
24   
25           //painting
26           SPainter deb = new SPainter("Kanizsa Square",2*sideLength,2*sideLength);
27   
28           double ratio = 0.375;
29   
30           SSquare box = new SSquare(sideLength);
31           SCircle dot = new SCircle(ratio*box.side());
32   
33           paintBlueCircle(deb,dot,box);
34           paintRedCircle(deb,dot,box);
35           paintGreenCircles(deb,dot,box);
36           paintWhiteSquare(deb,box);
37   
38   
39       }
40       private void paintBlueCircle(SPainter deb, SCircle dot, SSquare box) {
41           //move painter into position
42           deb.mfd(0.5*box.side());
43           deb.mlt(0.5* box.side());
44   
45           //paint circle
46           deb.setColor(Color.BLUE);
47           deb.paint(dot);
48   
49           //move painter to center
50           deb.moveToCenter();
51   
52       }
53       private void paintRedCircle(SPainter deb, SCircle dot, SSquare box) {
54           //move painter into position
55           deb.mbk(0.5*box.side());
56           deb.mrt(0.5* box.side());
57   
58           //paint circle
59           deb.setColor(Color.RED);
60           deb.paint(dot);
61   
62           //move painter to center
63           deb.moveToCenter();
64   
65       }
66       private void paintGreenCircles(SPainter deb, SCircle dot, SSquare box) {
67           //NE Circle
68           //move painter into position
69           deb.mfd(0.5*box.side());
70           deb.mrt(0.5* box.side());
71   
72           //paint circle
73           deb.setColor(Color.GREEN);
74           deb.paint(dot);
75   
76           //move painter to center
77           deb.moveToCenter();
78   
79           //SW Circle
80           //move painter into position
81           deb.mbk(0.5*box.side());
82           deb.mlt(0.5* box.side());
83   
84           //paint circle
85           deb.setColor(Color.GREEN);
86           deb.paint(dot);
87   
88           //move painter to center
89           deb.moveToCenter();
90       }
91   
92       private void paintWhiteSquare(SPainter deb, SSquare box) {
93           //paint square
94           deb.setColor(Color.WHITE);
95           deb.paint(box);
96   
97           //move painter to center
98           deb.moveToCenter();
99   
100      }
101  
102      //Required Infrastructure
103  
104      public KanizsaSquareInput() {
105          paintTheImage();
106      }
107  
108      public static void main(String[] args) {
109          SwingUtilities.invokeLater(new Runnable() {
110              public void run() {
111                  new KanizsaSquareInput();
112              }
113          });
114      }
115  }
116