// Purpose.  Positioning images and text on a JButton

import java.util.Hashtable;
import java.awt.GridLayout;
import java.awt.event.*;  // WindowAdapter, WindowEvent, ItemListener, ItemEvent
import javax.swing.*;

public class ImageIconDemo {
   private static JButton btn =
      new JButton( "Button Text", new ImageIcon("cancel.gif") );
   private static Hashtable ht = new Hashtable();
   private static int getInt(Object s) {return ((Integer)ht.get(s)).intValue();}

   public static void main( String[] args ) {
      String[] horPosit = { "LEFT", "CENTER", "RIGHT" };
      String[] verPosit = { "TOP", "CENTER", "BOTTOM" };
      JFrame  f   = new JFrame( "Image Icon demo" );
      f.addWindowListener( new WindowAdapter() {
         public void windowClosing( WindowEvent e ) { System.exit( 0 ); } } );
      f.getContentPane().setLayout( new GridLayout(5,1) );
      f.getContentPane().add( btn );
      ht.put( "LEFT", new Integer(SwingConstants.LEFT) );
      ht.put( "RIGHT", new Integer(SwingConstants.RIGHT) );
      ht.put( "CENTER", new Integer(SwingConstants.CENTER) );
      ht.put( "TOP", new Integer(SwingConstants.TOP) );
      ht.put( "BOTTOM", new Integer(SwingConstants.BOTTOM) );
      JPanel panel;   JComboBox align;

      f.getContentPane().add( panel = new JPanel() );
      panel.add( new JLabel( "Hor text posit" ) );
      panel.add( align = new JComboBox( horPosit ) );
      align.addItemListener( new ItemListener() {
         public void itemStateChanged( ItemEvent e ) {
            if (e.getStateChange() == ItemEvent.DESELECTED) return;
            btn.setHorizontalTextPosition( getInt( e.getItem() ));
         }
      } );
      f.getContentPane().add( panel = new JPanel() );
      panel.add( new JLabel( "Ver text posit" ) );
      panel.add( align = new JComboBox( verPosit ) );
      align.addItemListener( new ItemListener() {
         public void itemStateChanged( ItemEvent e ) {
            if (e.getStateChange() == ItemEvent.DESELECTED) return;
            btn.setVerticalTextPosition( getInt( e.getItem() ));
         }
      } );
      f.getContentPane().add( panel = new JPanel() );
      panel.add( new JLabel( "Hor alignment" ) );
      panel.add( align = new JComboBox( horPosit ) );
      align.addItemListener( new ItemListener() {
         public void itemStateChanged( ItemEvent e ) {
            if (e.getStateChange() == ItemEvent.DESELECTED) return;
            btn.setHorizontalAlignment( getInt( e.getItem() ));
         }
      } );
      f.getContentPane().add( panel = new JPanel() );
      panel.add( new JLabel( "Ver alignment" ) );
      panel.add( align = new JComboBox( verPosit ) );
      align.addItemListener( new ItemListener() {
         public void itemStateChanged( ItemEvent e ) {
            if (e.getStateChange() == ItemEvent.DESELECTED) return;
            btn.setVerticalAlignment( getInt( e.getItem() ));
         }
      } );
      f.pack();   f.setVisible( true );
}  }
