KanizsaSquare.java
/* 
 *program to paint a KanizsaSquare  in the context of the non representational painting world, npw 
 * 
 */
package npw;

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


public class KanizsaSquare {

    //solution to Kanizsa problem
    private void paintTheImage(){
        SPainter painter = new SPainter("Kanizsa Square",400,400);

        SCircle dot = new SCircle(75);
        paintBlueCircle(painter, dot);
        paintRedCircle(painter, dot);
        paintGreenCircles(painter, dot);

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

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

    }

    private void paintGreenCircles(SPainter painter, SCircle dot) {
        Point2D.Double coords = new Point2D.Double();
        coords.setLocation(300,100);


        painter.setColor(Color.GREEN);
        //System.out.println(painter.center());

        painter.moveTo(coords);
        painter.paint(dot);

        coords.setLocation(100, 300);
        painter.moveTo(coords);
        painter.paint(dot);
    }

    private void paintRedCircle(SPainter painter, SCircle dot) {
        Point2D.Double coords = new Point2D.Double();
        coords.setLocation(300,300);
        //System.out.println(painter.center());
        painter.moveTo(coords);
        painter.setColor(Color.RED);
        painter.paint(dot);
    }

    private void paintBlueCircle(SPainter painter, SCircle dot) {
           //establish a 2d point variable, and set it to the coords for the upper left corner
        Point2D.Double coords = new Point2D.Double();
        coords.setLocation(100,100);
        //System.out.println(painter.center());
        painter.moveTo(coords);
        painter.setColor(Color.BLUE);
        painter.paint(dot);

    }

    //required infrastructure
    public KanizsaSquare(){
        paintTheImage();
    }

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