001 package com.croftsoft.apps.color;
002
003 import java.applet.Applet;
004 import java.awt.*;
005
006 import com.croftsoft.core.lang.lifecycle.Lifecycle;
007
008 /*********************************************************************
009 * Displays colors with RGB and HSB values.
010 *
011 * @version
012 * 2002-02-27
013 * @since
014 * 1996-08-22
015 * @author
016 * <a href="https://www.croftsoft.com/">David Wallace Croft</a>
017 *********************************************************************/
018
019 public class ColorTest
020 extends Applet
021 implements Lifecycle
022 //////////////////////////////////////////////////////////////////////
023 //////////////////////////////////////////////////////////////////////
024 {
025
026 Canvas swatch;
027 ColorControls rgbControls, hsbControls;
028
029 public void init ( ) {
030 //////////////////////////////////////////////////////////////////////
031 Color theColor = new Color ( 0, 0, 0 );
032 float [ ] hsb = Color.RGBtoHSB ( theColor.getRed ( ),
033 theColor.getGreen ( ), theColor.getBlue ( ),
034 ( new float [ 3 ] ) );
035 setLayout ( new GridLayout ( 1, 3, 10, 10 ) );
036 swatch = new Canvas ( );
037 swatch.setBackground ( theColor );
038 rgbControls = new ColorControls ( this,
039 "Red (0-255)", "Green (0-255)", "Blue (0-255)",
040 theColor.getRed ( ), theColor.getGreen ( ),
041 theColor.getBlue ( ) );
042 hsbControls = new ColorControls ( this,
043 "Hue (0-360)", "Saturation (0-100)", "Brightness (0-100)",
044 ( int ) ( hsb [ 0 ] * 360 ),
045 ( int ) ( hsb [ 1 ] * 100 ),
046 ( int ) ( hsb [ 2 ] * 100 ) );
047 add ( swatch );
048 add ( rgbControls );
049 add ( hsbControls );
050 }
051
052 public Insets insets ( ) {
053 //////////////////////////////////////////////////////////////////////
054 return new Insets ( 5, 5, 5, 5 );
055 }
056
057 void update ( ColorControls in ) {
058 //////////////////////////////////////////////////////////////////////
059 Color c;
060 String v1 = in.f1.getText ( );
061 String v2 = in.f2.getText ( );
062 String v3 = in.f3.getText ( );
063 //////////////////////////////////////////////////////////////////////
064 if ( in == rgbControls ) {
065 c = new Color (
066 Integer.parseInt ( v1 ),
067 Integer.parseInt ( v2 ),
068 Integer.parseInt ( v3 ) );
069 swatch.setBackground ( c );
070 float [ ] hsb = Color.RGBtoHSB (
071 c.getRed ( ), c.getGreen ( ), c.getBlue ( ),
072 ( new float [ 3 ] ) );
073 hsb [ 0 ] *= 360;
074 hsb [ 1 ] *= 100;
075 hsb [ 2 ] *= 100;
076 hsbControls.f1.setText ( String.valueOf ( ( int ) hsb [ 0 ] ) );
077 hsbControls.f2.setText ( String.valueOf ( ( int ) hsb [ 1 ] ) );
078 hsbControls.f3.setText ( String.valueOf ( ( int ) hsb [ 2 ] ) );
079 } else {
080 int f1 = Integer.parseInt ( v1 );
081 int f2 = Integer.parseInt ( v2 );
082 int f3 = Integer.parseInt ( v3 );
083 c = Color.getHSBColor (
084 ( float ) f1 / 360,
085 ( float ) f2 / 100,
086 ( float ) f3 / 100 );
087 swatch.setBackground ( c );
088 rgbControls.f1.setText ( String.valueOf ( c.getRed ( ) ) );
089 rgbControls.f2.setText ( String.valueOf ( c.getGreen ( ) ) );
090 rgbControls.f3.setText ( String.valueOf ( c.getBlue ( ) ) );
091 }
092 }
093
094 //////////////////////////////////////////////////////////////////////
095 //////////////////////////////////////////////////////////////////////
096 }
097
098 class ColorControls extends Panel {
099 //////////////////////////////////////////////////////////////////////
100 //////////////////////////////////////////////////////////////////////
101 ColorTest outerparent;
102 TextField f1, f2, f3;
103
104 ColorControls (
105 ColorTest target,
106 String l1,
107 String l2,
108 String l3,
109 int v1,
110 int v2,
111 int v3 ) {
112 //////////////////////////////////////////////////////////////////////
113 // Constructor method
114 //////////////////////////////////////////////////////////////////////
115 this.outerparent = target;
116 setLayout ( new GridLayout ( 3, 2, 10, 10 ) );
117 f1 = new TextField ( String.valueOf ( v1 ), 10 );
118 f2 = new TextField ( String.valueOf ( v2 ), 10 );
119 f3 = new TextField ( String.valueOf ( v3 ), 10 );
120 add ( new Label ( l1, Label.RIGHT ) );
121 add ( f1 );
122 add ( new Label ( l2, Label.RIGHT ) );
123 add ( f2 );
124 add ( new Label ( l3, Label.RIGHT ) );
125 add ( f3 );
126 }
127
128 public boolean action ( Event evt, Object arg ) {
129 //////////////////////////////////////////////////////////////////////
130 if ( evt.target instanceof TextField ) {
131 outerparent.update ( this );
132 outerparent.repaint ( );
133 return true;
134 } else return false;
135 }
136
137 public Insets insets ( ) {
138 //////////////////////////////////////////////////////////////////////
139 return new Insets ( 5, 5, 0, 0 );
140 }
141
142 //////////////////////////////////////////////////////////////////////
143 //////////////////////////////////////////////////////////////////////
144 }
145