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

public class KaniszaSquare {
    //The Solution to the blue dot problem
    private void paintTheImage() {
        SPainter painter = new SPainter("Kanizsa Square",400,400);
        SSquare square = new SSquare(200);
        SCircle dot = new SCircle(50);
        drawBlackSquare(painter, square);
        paintBlueCircles(painter, dot);
        paintGreenCircles(painter, dot);
        paintWhiteSquare(painter, square);
    }

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

    }

    private void paintGreenCircles(SPainter painter, SCircle dot) {
        painter.setColor(Color.GREEN);
        painter.mfd(100);
        painter.tr(90);
        painter.mfd(100);
        painter.paint(dot);
        painter.moveToCenter();
        painter.tl(90);
        painter.mbk(100);
        painter.tl(90);
        painter.mfd(100);
        painter.paint(dot);
        painter.moveToCenter();
    }

    private void paintBlueCircles(SPainter painter, SCircle dot) {
        painter.setColor(Color.BLUE);
        painter.mfd(100);
        painter.tl(90);
        painter.mfd(100);
        painter.paint(dot);
        painter.moveToCenter();
        painter.tr(90);
        painter.mbk(100);
        painter.tr(90);
        painter.mfd(100);
        painter.paint(dot);
        painter.moveToCenter();
        painter.tl(90);

    }

    private void drawBlackSquare(SPainter painter, SSquare square) {
        painter.setColor(Color.BLACK);
        painter.tr(45);
        painter.draw(square);
        painter.tl(45);
    }

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

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