/*
 * ColorBox.java
 * Created on November 1, 2007, 11:08 AM
 * by Rolf Lakaemper
 */

package colorbox;
import java.awt.*;
import javax.swing.*;

public class ColorBox extends JPanel{
    private static final int DEFAULTSIZE = 400;
    private int []colors;
    private int size;
    
    /** Creates a new instance of ColorBox */
    public ColorBox(int inSize) {
        size = inSize;
        colors = new int[size*size];
        initRandom();
        
        // Visuals
        setPreferredSize(new Dimension(size,size));
        JFrame frame = new JFrame("ColorBox");
        frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
        frame.getContentPane().add(this);
        frame.pack();
        frame.setVisible(true);
    }
    
    /** Creates a new instance of ColorBox */
    public ColorBox() {
        this(DEFAULTSIZE);
    }
    
    public void initRandom(){
        for (int i=0;i<colors.length;i++){
            colors[i]=(int)(Math.floor(Math.random()*256));
        }
        
    }
    
    public int[] getColorValues(){
        // return a COPY of colors, keeps colors private
        int []c=new int[colors.length];
        System.arraycopy(colors,0,c,0,colors.length);
        return(c);
    }
    
    public void setColorValues(int []c){
        if (c.length!=colors.length){
            System.out.println("Error, arrays of different size.");
        }
        else{
            System.arraycopy(c,0,colors,0,colors.length);
        }
        repaint();
        return;
    }
    
    public void paintComponent(Graphics g){
        int count = 0;
        for (int row=0;row<size;row++){
            for (int r=row;r>=0;r--){
                g.setColor(new Color(colors[count],0,0));
                count++;
                g.drawLine(row-r,r,row-r,r);
            }
        }
        for (int col=1;col<size;col++){
            for (int c=col;c<size;c++){
                g.setColor(new Color(colors[count],0,0));
                count++;
                g.drawLine(c,size-c+col-1,c,size-c+col-1);
            }
        }
    }
 
    public static void main(String []args){
        ColorBox cb = new ColorBox(500);
        int []c=cb.getColorValues();
        java.util.Arrays.sort(c);
        cb.setColorValues(c);
    }
}
