1  /*
  2   *  File:  MyColorBoxes5.java
  3   *
  4   *  Display built-in colors with labels, a 2D array, a nested loop,
  5   *  some constants, and a hashtable
  6   *
  7   *  Copyright:  Northeast Parallel Architectures Center
  8   *  
  9   */
 10  
 11  import java.applet.Applet;
 12  import java.awt.Graphics;
 13  import java.awt.Color;
 14  import java.awt.FontMetrics;
 15  import java.util.Hashtable;
 16  import java.util.Enumeration;
 17  
 18  public class MyColorBoxes5 extends Applet {
 19  
 20     // size of each color swatch:
 21     private final int swatchSize = 70;
 22     // whitespace around each color swatch:
 23     private final int border = 15;
 24     // total size, including whitespace:
 25     private final int unitSize = swatchSize + 2*border;
 26     // number of color swatches per row:
 27     private final int cols = 4;
 28  
 29     // A hashtable of colors:
 30     private Hashtable colors = new Hashtable();
 31     
 32     public void init() {
 33        colors.put( "black", Color.black );
 34        colors.put( "blue", Color.blue );
 35        colors.put( "cyan", Color.cyan );
 36        colors.put( "darkGray", Color.darkGray );
 37        colors.put( "gray", Color.gray );
 38        colors.put( "green", Color.green );
 39        colors.put( "lightGray", Color.lightGray );
 40        colors.put( "magenta", Color.magenta );
 41        colors.put( "orange", Color.orange );
 42        colors.put( "pink", Color.pink );
 43        colors.put( "red", Color.red );
 44        colors.put( "white", Color.white );
 45        colors.put( "yellow", Color.yellow );
 46        colors.put( "brown", new Color( 0xA5, 0x2A, 0x2A ) );
 47        colors.put( "turquoise", new Color( 0x40, 0xE0, 0xD0 ) );
 48        colors.put( "violet", new Color( 0xEE, 0x82, 0xEE ) );
 49        colors.put( "gold", new Color( 0xFF, 0xD7, 0x00 ) );
 50        colors.put( "darkBrown", new Color( 0x5C, 0x40, 0x33 ) );
 51        colors.put( "navy", new Color( 0x00, 0x00, 0x80 ) );
 52        colors.put( "darkPurple", new Color( 0x87, 0x1F, 0x78 ) );
 53     }
 54     
 55     public void paint( Graphics g ) {
 56        
 57        // local variables:
 58        int x, y;
 59        Color color;
 60        String colorstring;
 61        
 62        // vertical adjustment for color labels:
 63        int descender = g.getFontMetrics().getDescent();
 64        
 65        // an enumeration of keys in the hashtable:
 66        Enumeration colorstrings = colors.keys();
 67        
 68        // Draw rows of color boxes:
 69        int rows = ( int ) Math.ceil( ( double ) colors.swatchSize()/cols );
 70        for ( int i = 0; i < rows; i++ ) {
 71           y = border + unitSize*i;
 72           for ( int j = 0; j < cols; j++ ) {
 73              if ( !colorstrings.hasMoreElements() ) break;
 74              colorstring = ( String ) colorstrings.nextElement();
 75              color = ( Color ) colors.get( colorstring );
 76              x = border + unitSize*j;
 77              g.setColor( color );
 78              g.fillRect( x, y, swatchSize, swatchSize );
 79              g.setColor( Color.black );
 80              g.drawString( colorstring, x, y - descender );
 81           }
 82        }
 83        
 84     }
 85  
 86  }
 87