import java.awt.Color;
import java.awt.Graphics;
import java.awt.Point;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.Observable;
import java.util.Observer;

import javax.swing.JComponent;
/*
 * Created on Jan 11, 2005
 */

/**
 * @author David Matuszek
 * @version Jan 11, 2005
 */
public class ColorArrayComponent extends JComponent {
    Color[][] colors;

    public ColorArrayComponent(Color[][] colors, Observer observer) {
        super();
        this.colors = colors;
        MouseHandler handler = new MouseHandler(this);
        addMouseListener(handler);
        handler.addObserver(observer);
    }
    
    protected void paintComponent(Graphics g) {
        int width = this.getWidth();
        int height = this.getHeight();
        for (int i = 0; i < colors.length; i++) {
            int top = (i * height) / colors.length;
            int bottom = ((i + 1) * height) / colors.length;
            for (int j = 0; j < colors[i].length; j++) {
                int left = (j * width) / colors[i].length;
                int right = ((j + 1) * width) / colors[i].length;
                g.setColor(colors[i][j]);
                g.fillRect(left, top, right - left, bottom - top);
            }
        }    
    }
    
    class MouseHandler extends Observable implements MouseListener {
        ColorArrayComponent grid;
        public MouseHandler(ColorArrayComponent component) {
            grid = component; 
        }
        public void mouseClicked(MouseEvent e) {
            int row = (e.getY() * grid.colors.length) / grid.getHeight();
            int column = (e.getX() * grid.colors[row].length) / grid.getWidth();
            setChanged();
            notifyObservers(new Point(row, column));
        }
        public void mousePressed(MouseEvent e) { }
        public void mouseReleased(MouseEvent e) { }
        public void mouseEntered(MouseEvent e) { }
        public void mouseExited(MouseEvent e) { }
    }
}
