// MyColorChooser.java
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;


public class MyColorChooser extends JPanel {
   private JSlider redSlider, blueSlider, greenSlider;
   private JTextField redDisplay, blueDisplay, greenDisplay;
   private JLabel redLabel, blueLabel, greenLabel;
   private Color color;
    
   public MyColorChooser()
   {
      redLabel = new JLabel( "Red:" );
      redSlider = new JSlider( SwingConstants.HORIZONTAL, 0, 255, 1 );
      redDisplay = new JTextField( "0", 4 );

      greenLabel = new JLabel( "Green:" );
      greenSlider = new JSlider( SwingConstants.HORIZONTAL, 0, 255, 1 );
      greenDisplay = new JTextField( "0", 4 );

      blueLabel = new JLabel( "Blue:" );
      blueSlider = new JSlider( SwingConstants.HORIZONTAL, 0, 255, 1 );       
      blueDisplay = new JTextField( "0", 4 );
       
      setLayout( new GridLayout( 3, 3 ) );
       
      add( redLabel );
      add( redSlider );
      add( redDisplay );
      add( greenLabel );
      add( greenSlider );
      add( greenDisplay );
      add( blueLabel );
      add( blueSlider );
      add( blueDisplay );
      
      redSlider.addChangeListener( new ChangeHandler() );       
      greenSlider.addChangeListener( new ChangeHandler() );    
      blueSlider.addChangeListener( new ChangeHandler() );
       
      redDisplay.addActionListener( new ActionHandler() );       
      greenDisplay.addActionListener( new ActionHandler() );    
      blueDisplay.addActionListener( new ActionHandler() );
       
      color = Color.black;
   }

   public void setColor( Color c )
   {
      color = c;

      redSlider.setValue( c.getRed() );
      redDisplay.setText( String.valueOf( c.getRed() ) );
   
      greenSlider.setValue( c.getGreen() );
      greenDisplay.setText( String.valueOf( c.getGreen() ) );

      blueSlider.setValue( c.getBlue() );
      blueDisplay.setText( String.valueOf( c.getBlue() ) );
   }

   public Color getColor() { return color; }

   public JSlider getRedSlider() { return redSlider; } 
   public JSlider getGreenSlider() { return greenSlider; } 
   public JSlider getBlueSlider() { return blueSlider; } 

   public JTextField getRedDisplay() { return redDisplay; } 
   public JTextField getGreenDisplay() { return greenDisplay; } 
   public JTextField getBlueDisplay() { return blueDisplay; } 

   private class ChangeHandler implements ChangeListener {
      public void stateChanged( ChangeEvent e )
      {
         int r = redSlider.getValue();
         int b = blueSlider.getValue();
         int g = greenSlider.getValue();
           
         color = new Color( r, g, b );
           
         redDisplay.setText( String.valueOf( r ) );
         blueDisplay.setText( String.valueOf( b ) );
         greenDisplay.setText( String.valueOf( g ) );
      }
   }

   private class ActionHandler implements ActionListener {
      public void actionPerformed( ActionEvent e )
      {
         int r = Integer.parseInt( redDisplay.getText() );
         int g = Integer.parseInt( greenDisplay.getText() );
         int b = Integer.parseInt( blueDisplay.getText() );
           
         color = new Color( r, g, b );
           
         redSlider.setValue( r );
         greenSlider.setValue( g );
         blueSlider.setValue( b );
      }
   }
}

