/* A ColorChooserApplet shows six scroll bars that the user can manipulate to set the red, gree, blue, hue, brightness, and saturation components of a color. A color patch shows the selected color, and there are six labels that show the numerical values of all the components. RGB components are specified as integers in the range 0 to 255. HSB components are specified as float values in the range 0.0F to 1.0F. */ import java.awt.*; import java.awt.event.*; import java.applet.*; public class ColorChooserApplet extends Applet implements AdjustmentListener { private float[] hsb = new float[3]; // For holding HSB color components. private int r = 0, g = 0, b = 0; // The RGB color components. private Scrollbar hueScroll, brightnessScroll, saturationScroll, // Scroll bars. redScroll, greenScroll, blueScroll; private Label hueLabel, brightnessLabel, saturationLabel, // Display component values. redLabel, greenLabel, blueLabel; private Canvas colorCanvas; // Color patch for displaying the color. public void init() { Color.RGBtoHSB(0,0,0,hsb); // Get HSB equivalent of RGB = (0,0,0); /* Create Scrollbars with possible values from 0 to 255. */ hueScroll = new Scrollbar(Scrollbar.HORIZONTAL, (int)(255*hsb[0]), 10, 0, 265); saturationScroll = new Scrollbar(Scrollbar.HORIZONTAL, (int)(255*hsb[1]), 10, 0, 265); brightnessScroll = new Scrollbar(Scrollbar.HORIZONTAL, (int)(255*hsb[2]), 10, 0, 265); redScroll = new Scrollbar(Scrollbar.HORIZONTAL, 0, 10, 0, 265); greenScroll = new Scrollbar(Scrollbar.HORIZONTAL, 0, 10, 0, 265); blueScroll = new Scrollbar(Scrollbar.HORIZONTAL, 0, 10, 0, 265); /* Create Labels showing current RGB and HSB values. */ hueLabel = new Label(" H = " + hsb[0]); saturationLabel = new Label(" S = " + hsb[1]); brightnessLabel = new Label(" B = " + hsb[2]); redLabel = new Label(" R = 0"); greenLabel = new Label(" G = 0"); blueLabel = new Label(" B = 0"); /* Set background colors for Scrollbars and Labels, so they don't inherit the gray background of the applet. */ hueScroll.setBackground(Color.lightGray); saturationScroll.setBackground(Color.lightGray); brightnessScroll.setBackground(Color.lightGray); redScroll.setBackground(Color.lightGray); greenScroll.setBackground(Color.lightGray); blueScroll.setBackground(Color.lightGray); hueLabel.setBackground(Color.white); saturationLabel.setBackground(Color.white); brightnessLabel.setBackground(Color.white); redLabel.setBackground(Color.white); greenLabel.setBackground(Color.white); blueLabel.setBackground(Color.white); /* Set the applet to listen for changes to the Scrollbars' values */ hueScroll.addAdjustmentListener(this); saturationScroll.addAdjustmentListener(this); brightnessScroll.addAdjustmentListener(this); redScroll.addAdjustmentListener(this); greenScroll.addAdjustmentListener(this); blueScroll.addAdjustmentListener(this); /* Create a canvas whose background color will always be set to the currently selected color. */ colorCanvas = new Canvas(); colorCanvas.setBackground(Color.black); /* Create the applet format, which consists of a row of three equal-sized regions holding the Scrollbars, the Labels, and the color patch. The background color of the applet is gray, which will show around the edges and between components. */ setLayout(new GridLayout(1,3,3,3)); setBackground(Color.gray); Panel scrolls = new Panel(); Panel labels = new Panel(); add(scrolls); add(labels); add(colorCanvas); /* Add the Scrollbars and the Labels to their respective panels. */ scrolls.setLayout(new GridLayout(6,1,2,2)); scrolls.add(redScroll); scrolls.add(greenScroll); scrolls.add(blueScroll); scrolls.add(hueScroll); scrolls.add(saturationScroll); scrolls.add(brightnessScroll); labels.setLayout(new GridLayout(6,1,2,2)); labels.add(redLabel); labels.add(greenLabel); labels.add(blueLabel); labels.add(hueLabel); labels.add(saturationLabel); labels.add(brightnessLabel); } // end init(); public void adjustmentValueChanged(AdjustmentEvent evt) { // This is called when the user has changed the values on // one of the scrollbars. All the scrollbars and labels // and the color patch are reset to correspond to the new color. int r1, g1, b1; r1 = redScroll.getValue(); g1 = greenScroll.getValue(); b1 = blueScroll.getValue(); if (r != r1 || g != g1 || b != b1) { // One of the RGB components has changed. r = r1; g = g1; b = b1; Color.RGBtoHSB(r,g,b,hsb); } else { // One of the HSB components has changed. hsb[0] = hueScroll.getValue()/255.0F; hsb[1] = saturationScroll.getValue()/255.0F; hsb[2] = brightnessScroll.getValue()/255.0F; int rgb = Color.HSBtoRGB(hsb[0],hsb[1],hsb[2]); r = (rgb >> 16) & 0xFF; g = (rgb >> 8) & 0xFF; b = rgb & 0xFF; } redLabel.setText(" R = " + r); greenLabel.setText(" G = " + g); blueLabel.setText(" B = " + b); hueLabel.setText(" H = " + hsb[0]); saturationLabel.setText(" S = " + hsb[1]); brightnessLabel.setText(" B = " + hsb[2]); redScroll.setValue(r); greenScroll.setValue(g); blueScroll.setValue(b); hueScroll.setValue((int)(255*hsb[0])); saturationScroll.setValue((int)(255*hsb[1])); brightnessScroll.setValue((int)(255*hsb[2])); colorCanvas.setBackground(new Color(r,g,b)); colorCanvas.repaint(); // Tell the system to redraw the canvas in its new color. } // end adjustmentValueChanged public Insets getInsets() { // The system calls this method to find out how much space to // leave between the edges of the applet and the components that // it contains. I want a 3-pixel border at each edge. return new Insets(3,3,3,3); } } // end class ColorChooserApplet