import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.awt.Color;

public class demo_color extends Applet implements AdjustmentListener{

Scrollbar s_red,s_green,s_blue;
Panel p_red,p_green,p_blue;

Label valeur,l_red,l_green,l_blue;
Canvas c_princ,c_red,c_green,c_blue;
GridBagLayout gridbag;
GridBagConstraints constraint; 

void gbconst(GridBagConstraints gbc, int gx, int gy, int gw, int gh, int wx, int wy, String fill, String anchor)
//fonction utilisé avec les mises en pages de type GridBagLayout
// le parametre gbc passé à la fonction n'a pas besoin d'être declaré en static
        {
        gbc.gridx = gx;
        gbc.gridy = gy;
        gbc.gridwidth = gw;
        gbc.gridheight = gh;
        gbc.weightx = wx;
        gbc.weighty = wy;

	if (fill=="BOTH") gbc.fill = GridBagConstraints.BOTH;
	else if (fill=="HORIZONTAL") gbc.fill = GridBagConstraints.HORIZONTAL;
	else if (fill=="VERTICAL") gbc.fill = GridBagConstraints.VERTICAL;
	else 	{
		gbc.fill = GridBagConstraints.NONE;
		if (anchor=="NW") gbc.anchor = GridBagConstraints.NORTHWEST;
		else if (anchor=="NE") gbc.anchor = GridBagConstraints.NORTHEAST;
		else if (anchor=="SW") gbc.anchor = GridBagConstraints.SOUTHWEST;
		else if (anchor=="SE") gbc.anchor = GridBagConstraints.SOUTHEAST;
		else if (anchor=="N") gbc.anchor = GridBagConstraints.NORTH;
		else if (anchor=="S") gbc.anchor = GridBagConstraints.SOUTH;
		else if (anchor=="W") gbc.anchor = GridBagConstraints.WEST;
		else if (anchor=="E") gbc.anchor = GridBagConstraints.EAST;
		else  gbc.anchor = GridBagConstraints.CENTER;
		}
        }

public void init(){

	setBackground(new Color(Integer.parseInt(getParameter("rouge")),Integer.parseInt(getParameter("vert")),Integer.parseInt(getParameter("bleu"))));
	setForeground(Color.white);

      gridbag = new GridBagLayout();
      constraint = new GridBagConstraints();
      constraint.insets = new Insets(5, 5, 5, 5);
      setLayout(gridbag);

      //ecran principal
      gbconst(constraint,0,0,2,4,40,100,"BOTH","CENTER");
      c_princ = new Canvas();
      gridbag.setConstraints(c_princ, constraint);
      add(c_princ);

      //ecran pour le rouge
      gbconst(constraint,2,0,1,2,20,50,"BOTH","CENTER");
      c_red = new Canvas();
      gridbag.setConstraints(c_red, constraint);
      add(c_red);

      //ecran pour le vert
      gbconst(constraint,3,0,1,2,20,50,"BOTH","CENTER");
      c_green = new Canvas();
      gridbag.setConstraints(c_green, constraint);
      add(c_green);

      //ecran pour le bleu
      gbconst(constraint,4,0,1,2,20,50,"BOTH","CENTER");
      c_blue = new Canvas();
      gridbag.setConstraints(c_blue, constraint);
      add(c_blue);

      //saisie rouge
      gbconst(constraint,2,2,1,1,20,25,"","CENTER");
      s_red = new Scrollbar(Scrollbar.HORIZONTAL,128,1,0,256);
	s_red.setName("red");
	s_red.addAdjustmentListener(this);
	p_red = new Panel();
	p_red.setLayout(new GridLayout(2,1));
	p_red.add(l_red =new Label("128"));
	p_red.add(s_red);
	gridbag.setConstraints(p_red, constraint);
      add(p_red);

      //saisie vert
      gbconst(constraint,3,2,1,1,20,25,"","CENTER");
      s_green = new Scrollbar(Scrollbar.HORIZONTAL,128,1,0,256);
	s_green.setName("green");
	s_green.addAdjustmentListener(this);
	p_green = new Panel();
	p_green.setLayout(new GridLayout(2,1));
	p_green.add(l_green = new Label("128"));
	p_green.add(s_green);
      gridbag.setConstraints(p_green, constraint);
      add(p_green);

      //saisie bleu
      gbconst(constraint,4,2,1,1,20,25,"","CENTER");
      s_blue = new Scrollbar(Scrollbar.HORIZONTAL,128,1,0,256);
	s_blue.setName("blue");
	s_blue.addAdjustmentListener(this);
	p_blue = new Panel();
	p_blue.setLayout(new GridLayout(2,1));
	p_blue.add(l_blue = new Label("128"));
	p_blue.add(s_blue);
      gridbag.setConstraints(p_blue, constraint);
      add(p_blue);

      //affichage de la valeur hexadecimale
      gbconst(constraint,2,3,3,1,60,25,"","CENTER");
      valeur = new Label("valeur hexadecimale : 808080");
      gridbag.setConstraints(valeur, constraint);
      add(valeur);

      c_princ.setBackground(new Color(128,128,128));
      c_red.setBackground(new Color(128,0,0));
      c_green.setBackground(new Color(0,128,0));
      c_blue.setBackground(new Color(0,0,128));
}

public void adjustmentValueChanged(AdjustmentEvent e)
{
String name = ((Scrollbar)(e.getSource())).getName();
int val_red = s_red.getValue();
int val_green = s_green.getValue();
int val_blue = s_blue.getValue();

if (val_red >255) val_red = 255;
if (val_green >255) val_green = 255;
if (val_blue >255) val_blue = 255;

if (name.equals("red")) 
	{
	c_red.setBackground(new Color(val_red,0,0));
	c_red.repaint();
	l_red.setText(""+val_red);
	}
else if (name.equals("green")) 
	{
	c_green.setBackground(new Color(0,val_green,0));
	c_green.repaint();
	l_green.setText(""+val_green);
	}
else if (name.equals("blue")) 
	{
	c_blue.setBackground(new Color(0,0,val_blue));
	c_blue.repaint();
	l_blue.setText(""+val_blue);
	}
c_princ.setBackground(new Color(val_red,val_green,val_blue));
String strred = (val_red<16)?"0"+Integer.toHexString(val_red):Integer.toHexString(val_red);
String strgreen = (val_green<16)?"0"+Integer.toHexString(val_green):Integer.toHexString(val_green);
String strblue = (val_blue<16)?"0"+Integer.toHexString(val_blue):Integer.toHexString(val_blue);
valeur.setText("valeur hexadecimale : "+strred+strgreen+strblue);
c_princ.repaint();
}

public Insets getInsets(){
return (new Insets(5,5,5,5));
}

}