import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import java.awt.*;
//import java.util.*;

public class SlidePanel extends JPanel {

    private PaintBox owner; // the main JFrame
    private JSlider red;
    private JSlider green;
    private JSlider blue;

    public SlidePanel(PaintBox o) {
        owner = o; // reference to the main frame

        Box box = Box.createHorizontalBox(); // a holder

        box.add(red = addSlider(Color.red, true));
        box.add(green = addSlider(Color.green, true));
        box.add(blue = addSlider(Color.blue, false));
        add(box);
    }

    /*
     * A helper medthod to avoid duplicated code
     */
    private JSlider addSlider(Color c, boolean bol) {
        JSlider s = new JSlider(SwingConstants.VERTICAL, // direction
                                0,    // min value
                                255,  // max value
                                0); // initial value
        s.setMinorTickSpacing(25);
        if (bol) {
            s.setMajorTickSpacing(50);
        }
        s.setPaintTicks(true);
        s.setForeground(c); // foreground color

        s.addChangeListener(new SliderChangeListener());

        return s;
    }

    public void setColor() {
        int r = red.getValue();
        int g = green.getValue();
        int b = blue.getValue();
        owner.setColor(r, g, b);
    }

    /*
     * An anonymous listener class that have full access to
     * the variables and methods of the "surrounding" object
     */
    class SliderChangeListener implements ChangeListener {
        public void stateChanged(ChangeEvent e) {
            setColor();
        }
    }
}


