001         package com.croftsoft.core.gui;
002    
003         import java.awt.*;
004         import java.awt.event.*;
005         import java.util.*;
006         import javax.swing.*;
007    
008         import com.croftsoft.core.lang.NullArgumentException;
009         import com.croftsoft.core.lang.Pair;
010    
011         /*********************************************************************
012         * A JPanel of JTextFields with identifying JLabels.
013         *
014         * <p>
015         * Created JTextField objects are available via an accessor method.
016         * </p>
017         *
018         * <p>
019         * Example:
020         * <code>
021         * <pre>
022         * LabeledFieldsPanel2  labeledFieldsPanel2 = new LabeledFieldsPanel2 (
023         *   new String [ ] { "username", "password" } );
024         *
025         * JTextField  passwordJTextField
026         *   = labeledFieldsPanel2.getJTextField ( "password" );
027         *
028         * passwordJTextField.setEchoChar ( '*' );
029         * </pre>
030         * </code>
031         * </p>
032         *
033         * @version
034         *   2001-07-30
035         * @since
036         *   2001-07-06
037         * @author
038         *   <a href="http://croftsoft.com/">David Wallace Croft</a>
039         *********************************************************************/
040    
041         public final class  LabeledFieldsPanel2
042           extends JPanel
043         //////////////////////////////////////////////////////////////////////
044         //////////////////////////////////////////////////////////////////////
045         {
046    
047         private final Hashtable  labelNameToTextFieldMap = new Hashtable ( );
048    
049         //////////////////////////////////////////////////////////////////////
050         //////////////////////////////////////////////////////////////////////
051    
052         public  LabeledFieldsPanel2 (
053           Pair [ ]  pairs,
054           Color     panelBackgroundColor,
055           Color     textFieldBackgroundColor )
056         //////////////////////////////////////////////////////////////////////
057         {
058           super ( new GridBagLayout ( ), true );
059    
060           NullArgumentException.check ( pairs );
061    
062           GridBagConstraints  gridBagConstraints = new GridBagConstraints ( );
063    
064           gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
065    
066    //       gridBagConstraints.ipadx = 10;
067    
068    //       gridBagConstraints.ipady = 10;
069    
070           gridBagConstraints.insets = new Insets ( 10, 10, 10, 10 );
071    
072           for ( int  i = 0; i < pairs.length; i++ )
073           {
074             gridBagConstraints.gridx = 0;
075    
076             gridBagConstraints.gridy = i;
077    
078             gridBagConstraints.weightx = 0.0;
079    
080             String  labelName = pairs [ i ].name;
081    
082             add ( new JLabel ( labelName ), gridBagConstraints );
083    
084             JTextField  jTextField = new JTextField ( );
085    
086             if ( pairs [ i ].value != null )
087             {
088               jTextField.setText ( pairs [ i ].value );
089             }
090    
091             labelNameToTextFieldMap.put ( labelName, jTextField );
092    
093             gridBagConstraints.gridx = 1;
094    
095             gridBagConstraints.weightx = 1.0;
096    
097             add ( jTextField, gridBagConstraints );
098    
099             if ( textFieldBackgroundColor != null )
100             {
101               jTextField.setBackground ( textFieldBackgroundColor );
102             }
103           }
104    
105           if ( panelBackgroundColor != null )
106           {
107             setBackground ( panelBackgroundColor );
108           }
109         }
110    
111         public  LabeledFieldsPanel2 (
112           String [ ]  labelNames,
113           Color       panelBackgroundColor,
114           Color       textFieldBackgroundColor )
115         //////////////////////////////////////////////////////////////////////
116         {
117           this ( Pair.toPairs ( labelNames ),
118             panelBackgroundColor, textFieldBackgroundColor );
119         }
120    
121         public  LabeledFieldsPanel2 (
122           String  labelName,
123           Color   panelBackgroundColor,
124           Color   textFieldBackgroundColor )
125         //////////////////////////////////////////////////////////////////////
126         {
127           this ( new String [ ] { labelName },
128             panelBackgroundColor, textFieldBackgroundColor );
129         }
130    
131         public  LabeledFieldsPanel2 ( String [ ]  labelNames )
132         //////////////////////////////////////////////////////////////////////
133         {
134           this ( labelNames, null, null );
135         }
136    
137         public  LabeledFieldsPanel2 ( String  labelName )
138         //////////////////////////////////////////////////////////////////////
139         {
140           this ( new String [ ] { labelName }, null, null );
141         }
142    
143         //////////////////////////////////////////////////////////////////////
144         //////////////////////////////////////////////////////////////////////
145    
146         public JTextField  getJTextField ( String  labelName )
147         //////////////////////////////////////////////////////////////////////
148         {
149           JTextField  jTextField
150             = ( JTextField ) labelNameToTextFieldMap.get ( labelName );
151    
152           if ( jTextField == null )
153           {
154             throw new IllegalArgumentException ( labelName );
155           }
156    
157           return jTextField;
158         }
159    
160         public String  getText ( String  labelName )
161         //////////////////////////////////////////////////////////////////////
162         {
163           return getJTextField ( labelName ).getText ( );        
164         }
165    
166         public void  setText ( Pair  pair )
167         //////////////////////////////////////////////////////////////////////
168         {
169           getJTextField ( pair.name ).setText (
170             pair.value != null ? pair.value : "" );
171         }
172    
173         public void  setText ( Pair [ ]  pairs )
174         //////////////////////////////////////////////////////////////////////
175         {
176           for ( int  i = 0; i < pairs.length; i++ )
177           {
178             setText ( pairs [ i ] );
179           }
180         }
181    
182         /*********************************************************************
183         * Adds the KeyListener to all of the JTextFields.
184         *********************************************************************/
185         public void  addKeyListener ( KeyListener  keyListener )
186         //////////////////////////////////////////////////////////////////////
187         {
188           Iterator  iterator
189             = labelNameToTextFieldMap.values ( ).iterator ( );
190    
191           while ( iterator.hasNext ( ) )
192           {
193             JTextField  jTextField = ( JTextField ) iterator.next ( );
194    
195             jTextField.addKeyListener ( keyListener );
196           }
197         }
198    
199         /*********************************************************************
200         * Removes the KeyListener from all of the JTextFields.
201         *********************************************************************/
202         public void  removeKeyListener ( KeyListener  keyListener )
203         //////////////////////////////////////////////////////////////////////
204         {
205           Iterator  iterator
206             = labelNameToTextFieldMap.values ( ).iterator ( );
207    
208           while ( iterator.hasNext ( ) )
209           {
210             JTextField  jTextField = ( JTextField ) iterator.next ( );
211    
212             jTextField.removeKeyListener ( keyListener );
213           }
214         }
215    
216         //////////////////////////////////////////////////////////////////////
217         //////////////////////////////////////////////////////////////////////
218         }