import java.awt.*;
import java.awt.event.*;
import java.text.*;

public class JColorDialog extends Dialog
   implements AdjustmentListener
{  

	public JColorDialog( Frame parent )
  {
  	  super( parent, "JColor" );
	   	setSize( 430, 200 );
	   	setResizable(false );

			nf.setMaximumFractionDigits( 3 );
   		nf.setMinimumFractionDigits( 3 );
   		   			
   	  setLayout( new FlowLayout(FlowLayout.CENTER,5,20) );

   	  GridLayout stackLayout = new GridLayout(0, 1, 5, 5);

			Panel labelPanel = new MyPanel();
			//labelPanel.setBackground( Color.green );
			labelPanel.setSize( 40, 70 );
			labelPanel.setLayout( stackLayout );
			
			Panel intValPanel = new MyPanel();
			//intValPanel.setBackground( Color.red );
			intValPanel.setSize( 30, 70 );
			intValPanel.setLayout( stackLayout );

			Panel dblValPanel = new MyPanel();
			//dblValPanel.setBackground( Color.red );
			dblValPanel.setSize( 35, 70 );
			dblValPanel.setLayout( stackLayout );

			Panel scrollbarPanel = new MyPanel();
			//scrollbarPanel.setBackground( Color.blue );
			scrollbarPanel.setSize( 140, 70 );
			scrollbarPanel.setLayout( stackLayout );

			colorCanvas = new Canvas();
			colorCanvas.setBackground( Color.black );
			colorCanvas.setSize( 120, 120 );

			add( labelPanel );
			add( intValPanel );
			add( dblValPanel );
			add( scrollbarPanel );
			add( colorCanvas );

			labelPanel.add( new Label( "Red" ) );
			redLabel = new Label("0");
      intValPanel.add(redLabel);  

      redValLabel = new Label("0.000");
      dblValPanel.add( redValLabel );

      red = new Scrollbar(Scrollbar.HORIZONTAL, 0, 0, 0, 256);
      scrollbarPanel.add( red );
      red.setSize( 100,10 );
      red.setBlockIncrement(32);
      red.addAdjustmentListener(this);
      red.setBackground( SystemColor.controlHighlight );

			labelPanel.add( new Label( "Green" ) );
			greenLabel = new Label("0");
      intValPanel.add( greenLabel );

      greenValLabel = new Label("0.000");
      dblValPanel.add( greenValLabel );

			green = new Scrollbar(Scrollbar.HORIZONTAL, 0, 0, 0, 256);
      scrollbarPanel.add(green);
      green.setSize( 100,10 );
      green.setBlockIncrement(32);
      green.addAdjustmentListener(this);
      green.setBackground( SystemColor.controlHighlight );

			labelPanel.add( new Label( "Blue" ) );
			blueLabel = new Label("0");
      intValPanel.add(blueLabel);

      blueValLabel = new Label("0.000");
      dblValPanel.add( blueValLabel );

      blue = new Scrollbar(Scrollbar.HORIZONTAL, 0, 0,0, 256);
      scrollbarPanel.add(blue);
      blue.setSize( 100,10 );
      blue.setBlockIncrement(32);
      blue.addAdjustmentListener(this);
      blue.setBackground( SystemColor.controlHighlight );
   }

   public void adjustmentValueChanged(AdjustmentEvent evt)
   {  
   		redLabel.setText("" + red.getValue());
      greenLabel.setText("" + green.getValue());         
      blueLabel.setText("" + blue.getValue());

      redValLabel.setText( nf.format( (double)red.getValue()/255.0 ) );
      greenValLabel.setText( nf.format( (double)green.getValue()/255.0 ) );         
      blueValLabel.setText( nf.format( (double)blue.getValue()/255.0 ) );

      colorCanvas.setBackground(new Color(red.getValue(), 
         green.getValue(), blue.getValue()));
      
      colorCanvas.repaint();
   }
   
   public static void main(String[] args)
   {  
   		Frame dummy = new Frame();
   		Dialog colorDialog = new JColorDialog( dummy );
   		
   		colorDialog.addWindowListener( new WindowAdapter() 
	   		{ 
	   			public void windowClosing( WindowEvent e)
	   			{
	   				System.exit(0);
	   			}
	   		}
	   	);
	   	
   		colorDialog.setVisible( true );
   }
   
   private NumberFormat nf = NumberFormat.getInstance();
   
   private Label redLabel;
   private Label greenLabel;
   private Label blueLabel;

   private Label redValLabel;
   private Label greenValLabel;
   private Label blueValLabel;


   private Scrollbar red;
   private Scrollbar green;
   private Scrollbar blue;
   
   private Canvas colorCanvas;
}

class MyPanel extends Panel
{
	public Dimension getPreferredSize()		
	{
		return getSize();
	}
}