KanizsaSquare.java
/* 
 *Program to paint blue dot in the context of the Nonrepresentational 
 * Painting World, NPW 
 */

package NPW;

import java.awt.Color;
import javax.swing.SwingUtilities;
import painter.SPainter;
import shapes.SCircle;
import shapes.SSquare;

public class KanizsaSquare {

    // THE SOLUTION TO THE BLUE DOT PROBLEM

    private void paintTheImage() {
        SPainter klee = new SPainter("Kanizsa Square",400,400);
        SCircle dot = new SCircle(75);
        paintBlueCircle(klee, dot);
        paintRedCircle(klee, dot);
        paintGreenCircles(klee, dot);

        SSquare square = new SSquare(200);
        paintWhiteSquare(klee, square);
    }

    private void paintBlueCircle (SPainter klee, SCircle dot) {
        klee.setColor(Color.BLUE);
        klee.mlt(100);
        klee.mfd(100);
        klee.paint(dot);
        klee.mrt(100);
        klee.mbk(100);
    }

    private void paintRedCircle (SPainter klee, SCircle dot) {
        klee.setColor(Color.RED);
        klee.mrt(100);
        klee.mbk(100);
        klee.paint(dot);
        klee.mlt(100);
        klee.mfd(100);
    }

    private void paintGreenCircles(SPainter klee, SCircle dot) {
        klee.setColor(Color.GREEN);
        klee.mlt(100);
        klee.mbk(100);
        klee.paint(dot);
        klee.mrt(200);
        klee.mfd(200);
        klee.paint(dot);
        klee.mlt(100);
        klee.mbk(100);
    }

    private void paintWhiteSquare(SPainter klee, SSquare square) {
        klee.setColor(Color.WHITE);
        klee.paint(square);
    }

    // REQUIRED INFASTRUCTURE

    public KanizsaSquare() { paintTheImage(); }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new KanizsaSquare();
            }
        });
    }
}