import java.awt.*; public class ColorTest extends java.applet.Applet { ClrCtrl RGBcontrols, HSBcontrols; Canvas swatch; public void init() { setLayout(new GridLayout(1,3,5,15)); swatch = new Canvas(); swatch.setBackground(Color.black); RGBcontrols = new ClrCtrl(this, "Red", "Green", "Blue"); HSBcontrols = new ClrCtrl(this, "Hue", "Saturation","Brightness"); add(swatch); add(RGBcontrols); add(HSBcontrols); } public Insets insets() { return new Insets(10,10,10,10); } void update(ClrCtrl controlPanel) { Color c; int val1 = Integer.parseInt(controlPanel.tf1.getText()); int val2 = Integer.parseInt(controlPanel.tf2.getText()); int val3 = Integer.parseInt(controlPanel.tf3.getText()); if (controlPanel==RGBcontrols) { // RGB changed update color as well as HSB values c = new Color(val1, val2, val3); float[] HSB = Color.RGBtoHSB(val1, val2, val3, (new float[3])); HSB[0]*= 360; HSB[1]*= 100; HSB[2]*= 100; HSBcontrols.tf1.setText(String.valueOf((int)HSB[0])); HSBcontrols.sc1.setValue((int)HSB[0]); HSBcontrols.tf2.setText(String.valueOf((int)HSB[1])); HSBcontrols.sc2.setValue((int)HSB[1]); HSBcontrols.tf3.setText(String.valueOf((int)HSB[2])); HSBcontrols.sc3.setValue((int)HSB[2]); } else { // HSB changed update color as well as RGB value c = Color.getHSBColor((float)val1/360, (float)val2/100, (float)val3/100); RGBcontrols.tf1.setText(String.valueOf(c.getRed())); RGBcontrols.sc1.setValue(c.getRed()); RGBcontrols.tf2.setText(String.valueOf(c.getGreen())); RGBcontrols.sc2.setValue(c.getGreen()); RGBcontrols.tf3.setText(String.valueOf(c.getBlue())); RGBcontrols.sc3.setValue(c.getBlue()); } swatch.setBackground(c); swatch.repaint(); } } class ClrCtrl extends Panel { TextField tf1, tf2, tf3; Scrollbar sc1, sc2, sc3; ColorTest applet; ClrCtrl(ColorTest parent, String l1, String l2, String l3) { applet = parent; // to access the parent class setLayout(new GridLayout(4,3,10,10)); tf1 = new TextField("0"); tf1.setEditable(false); tf2 = new TextField("0"); tf2.setEditable(false); tf3 = new TextField("0"); tf3.setEditable(false); if (l1.equals("Red")) { sc1 = new Scrollbar(Scrollbar.HORIZONTAL,0,0,0,256); sc2 = new Scrollbar(Scrollbar.HORIZONTAL,0,0,0,256); sc3 = new Scrollbar(Scrollbar.HORIZONTAL,0,0,0,256); } else { sc1 = new Scrollbar(Scrollbar.HORIZONTAL,0,0,0,361); sc2 = new Scrollbar(Scrollbar.HORIZONTAL,0,0,0,101); sc3 = new Scrollbar(Scrollbar.HORIZONTAL,0,0,0,101); } if (l1.equals("Red")) { add(new Label(" ",Label.CENTER)); add(new Label("RGB",Label.CENTER)); add(new Label(" ",Label.CENTER)); } else { add(new Label(" ",Label.CENTER)); add(new Label("HSB",Label.CENTER)); add(new Label(" ",Label.CENTER)); } add(new Label(l1, Label.RIGHT)); add(tf1); add(sc1); add(new Label(l2, Label.RIGHT)); add(tf2); add(sc2); add(new Label(l3, Label.RIGHT)); add(tf3); add(sc3); } public Insets insets() { return new Insets(10,10,0,0); } public boolean handleEvent(Event evt) { int v; if (evt.target instanceof Scrollbar) { v = this.sc1.getValue(); this.tf1.setText(String.valueOf(v)); v = this.sc2.getValue(); this.tf2.setText(String.valueOf(v)); v = this.sc3.getValue(); this.tf3.setText(String.valueOf(v)); repaint(); applet.update(this); return true; } else return false; } }