/**
 * @(#)botones.java
 *
 * Otra forma de llamar a los botones
 *
 * @author LGM
 * @version 1.00 04/10/22
 */
 
import java.awt.*;
import java.applet.*;
import java.text.DecimalFormat;

public class botones extends Applet {
	/* Valores de las componentes */
	int rojo,verde,azul;

	/* Cada uno de los botones */
	Button masrojo, menosrojo;
	Button masverde, menosverde;
	Button masazul, menosazul;

	/* Colores a usar */
	Color colnegro, colblanco, colfondo, paleta, colrojo, colverde, colazul;

	/* Formato para números a mostrar = 3 dígitos, sin decimales. */
	DecimalFormat tresceros = new DecimalFormat("000");
	public void init() {
		/* Configurar para posicionamiento absoluto en pixels */
		setLayout(null);

		/* Valores iniciales de las componentes */
		rojo=verde=azul=0;

		/* Colores a usar */
		colnegro=new Color(0,0,0);
		colfondo=new Color(51,102,255);
		colblanco=new Color(255,255,255);
		colrojo=new Color(255,0,0);
		colverde=new Color(0,255,0);
		colazul=new Color(0,0,255);
		
		/* Creación de botones con sus etiquetas */
		masrojo=new Button("+");
		add(masrojo);

		menosrojo=new Button("-");
		add(menosrojo);

		masverde=new Button("+");
		add(masverde);

		menosverde=new Button("-");
		add(menosverde);

		masazul=new Button("+");
		add(masazul);

		menosazul=new Button("-");
		add(menosazul);

		/* Especifico ubicación y tamaño de cada botón */
		menosrojo.setLocation(20,20);
		menosrojo.setSize(20,20);
		
		masrojo.setLocation(140,20);
		masrojo.setSize(20,20);

		menosverde.setLocation(20,40);
		menosverde.setSize(20,20);
		
		masverde.setLocation(140,40);
		masverde.setSize(20,20);
		
		menosazul.setLocation(20,60);
		menosazul.setSize(20,20);
		
		masazul.setLocation(140,60);
		masazul.setSize(20,20);
	}
	/**
	 * Para evitar que borre la pantalla por su cuenta...
	 */
	public void update(Graphics g) {
		paint(g);
	}

	public void paint(Graphics g) {
		/* Relleno con mi color de fondo favorito */
		g.setColor(colfondo);
		g.fillRect(0,0,320,200);
		
		/* Pinto el rectángulo vacío de los colores */
		g.setColor(colblanco);
		g.fillRect(40,20,100,60);
		
		/* Pinto los indicadores de rojo, verde y azul */
		if(rojo>0) {
			g.setColor(colrojo);
			g.fillRect(40,20,(int)((double)rojo*100.0/255.0),20);
		}
		if(verde>0) {
			g.setColor(colverde);
			g.fillRect(40,40,(int)((double)verde*100.0/255.0),20);
		}
		if(azul>0) {
			g.setColor(colazul);
			g.fillRect(40,60,(int)((double)azul*100.0/255.0),20);
		}

		/* Pinto el cuadrado con el color actual obtenido con las componentes */
		paleta=new Color(rojo,verde,azul);
		g.setColor(paleta);
		g.fillRect(170,35,30,30);

		/* Muestro el valor de las componentes, con el formato definido anteriormente.
		 * + es el operador de concatenación de String.
		 */
		g.setColor(colnegro);
		g.drawString(
				"Rojo:"+tresceros.format(rojo)
				+" Verde:"+tresceros.format(verde)
				+" Azul:"+tresceros.format(azul)
				,20,10);

		/* Dibujo bordes */
		g.drawRect(170,35,30,30);
		g.drawRect(40,20,100,60);
		g.drawLine(40,40,140,40);
		g.drawLine(40,60,140,60);
	}
	public boolean action(Event event, Object arg)
	{
		if (event.target instanceof Button) {
			/* Si el evento fue causado por un botón, reviso cuál fue el botón
			 * que yo presioné. La ventaja de comparar con las instancias mismas
			 * en vez de comparar por las etiquetas de cada botón es que no
			 * necesito que las etiquetas de cada botón sean distintas.
			 */
			if (event.target.equals(masrojo) && rojo<255) {
				rojo+=17;
			}
			if (event.target.equals(menosrojo) && rojo>0) {
				rojo-=17;
			}
			if (event.target.equals(masverde) && verde<255) {
				verde+=17;
			}
			if (event.target.equals(menosverde) && verde>0) {
				verde-=17;
			}
			if (event.target.equals(masazul) && azul<255) {
				azul+=17;
			}
			if (event.target.equals(menosazul) && azul>0) {
				azul-=17;
			}
		}      			
		repaint();
		return true;
	}
}

