001 package com.croftsoft.core.gui;
002
003 import java.awt.*;
004 import java.awt.event.*;
005 import javax.swing.*;
006 import javax.swing.event.*;
007
008 import com.croftsoft.core.gui.LabeledFieldsPanel2;
009 import com.croftsoft.core.lang.NullArgumentException;
010 import com.croftsoft.core.lang.Pair;
011
012 /*********************************************************************
013 * A JPanel for entering and editing name-value pairs.
014 *
015 * <p>
016 * Includes "Restore" and "Update" buttons and an optional panel
017 * for displaying help in HTML.
018 * </p>
019 *
020 * <p>
021 * Useful for manipulating user configuration properties.
022 * </p>
023 *
024 * @version
025 * 2002-01-29
026 * @since
027 * 2001-07-25
028 * @author
029 * <a href="https://www.croftsoft.com/">David Wallace Croft</a>
030 *********************************************************************/
031
032 public final class PairsPanel
033 extends JPanel
034 implements ActionListener, KeyListener
035 //////////////////////////////////////////////////////////////////////
036 //////////////////////////////////////////////////////////////////////
037 {
038
039 private Pair [ ] nameValuePairs;
040
041 private final ChangeListener changeListener;
042
043 private final ChangeEvent changeEvent;
044
045 private final boolean trimWhiteSpace;
046
047 private final LabeledFieldsPanel2 labeledFieldsPanel2;
048
049 private final JButton restoreButton;
050
051 private final JButton updateButton;
052
053 //////////////////////////////////////////////////////////////////////
054 //////////////////////////////////////////////////////////////////////
055
056 public PairsPanel (
057 Pair [ ] nameValuePairs,
058 String helpText,
059 ChangeListener changeListener,
060 boolean trimWhiteSpace,
061 Color panelBackgroundColor,
062 Color textFieldBackgroundColor )
063 //////////////////////////////////////////////////////////////////////
064 {
065 super ( new BorderLayout ( ), true ); // isDoubleBuffered
066
067 NullArgumentException.check (
068 this.nameValuePairs = nameValuePairs );
069
070 this.changeListener = changeListener;
071
072 this.trimWhiteSpace = trimWhiteSpace;
073
074 if ( panelBackgroundColor != null )
075 {
076 setBackground ( panelBackgroundColor );
077 }
078
079 changeEvent = new ChangeEvent ( this );
080
081 JPanel centerPanel = new JPanel ( new BorderLayout ( ), true );
082
083 labeledFieldsPanel2
084 = new LabeledFieldsPanel2 (
085 nameValuePairs,
086 panelBackgroundColor,
087 textFieldBackgroundColor );
088
089 labeledFieldsPanel2.addKeyListener ( this );
090
091 if ( helpText != null )
092 {
093 centerPanel.add (
094 new JScrollPane ( labeledFieldsPanel2 ), BorderLayout.WEST );
095
096 centerPanel.add ( new JScrollPane ( GuiCreator.createHtmlPane (
097 helpText, null ) ), BorderLayout.CENTER );
098
099 add ( centerPanel, BorderLayout.CENTER );
100 }
101 else
102 {
103 add (
104 new JScrollPane ( labeledFieldsPanel2 ), BorderLayout.CENTER );
105 }
106
107 restoreButton = new JButton ( "Restore" );
108
109 restoreButton.setEnabled ( false );
110
111 restoreButton.addActionListener ( this );
112
113 updateButton = new JButton ( "Update" );
114
115 updateButton.setEnabled ( false );
116
117 updateButton.addActionListener ( this );
118
119 add ( new ButtonPanel2 (
120 new JButton [ ] { restoreButton, updateButton } ),
121 BorderLayout.SOUTH );
122 }
123
124 public PairsPanel (
125 Pair [ ] nameValuePairs,
126 ChangeListener changeListener )
127 //////////////////////////////////////////////////////////////////////
128 {
129 this ( nameValuePairs, null, changeListener, true, null, null );
130 }
131
132 //////////////////////////////////////////////////////////////////////
133 //////////////////////////////////////////////////////////////////////
134
135 public String getText ( String name )
136 //////////////////////////////////////////////////////////////////////
137 {
138 return labeledFieldsPanel2.getText ( name );
139 }
140
141 //////////////////////////////////////////////////////////////////////
142 //////////////////////////////////////////////////////////////////////
143
144 public synchronized void setText ( Pair pair )
145 //////////////////////////////////////////////////////////////////////
146 {
147 labeledFieldsPanel2.setText ( pair );
148 }
149
150 public synchronized void setText ( Pair [ ] nameValuePairs )
151 //////////////////////////////////////////////////////////////////////
152 {
153 labeledFieldsPanel2.setText ( nameValuePairs );
154 }
155
156 //////////////////////////////////////////////////////////////////////
157 //////////////////////////////////////////////////////////////////////
158
159 public void keyPressed ( KeyEvent keyEvent )
160 //////////////////////////////////////////////////////////////////////
161 {
162 }
163
164 public void keyReleased ( KeyEvent keyEvent )
165 //////////////////////////////////////////////////////////////////////
166 {
167 }
168
169 public synchronized void keyTyped ( KeyEvent keyEvent )
170 //////////////////////////////////////////////////////////////////////
171 {
172 updateButton.setEnabled ( true );
173
174 restoreButton.setEnabled ( true );
175
176 labeledFieldsPanel2.removeKeyListener ( this );
177 }
178
179 //////////////////////////////////////////////////////////////////////
180 //////////////////////////////////////////////////////////////////////
181
182 public synchronized void actionPerformed ( ActionEvent actionEvent )
183 //////////////////////////////////////////////////////////////////////
184 {
185 Object source = actionEvent.getSource ( );
186
187 if ( source == restoreButton )
188 {
189 restoreButton.setEnabled ( false );
190
191 updateButton.setEnabled ( false );
192
193 for ( int i = 0; i < nameValuePairs.length; i++ )
194 {
195 labeledFieldsPanel2.setText ( nameValuePairs [ i ] );
196 }
197
198 labeledFieldsPanel2.addKeyListener ( this );
199 }
200 else if ( source == updateButton )
201 {
202 restoreButton.setEnabled ( false );
203
204 updateButton.setEnabled ( false );
205
206 for ( int i = 0; i < nameValuePairs.length; i++ )
207 {
208 Pair pair = nameValuePairs [ i ];
209
210 String value = labeledFieldsPanel2.getText ( pair.name );
211
212 if ( trimWhiteSpace )
213 {
214 value = value.trim ( );
215 }
216
217 if ( "".equals ( value ) )
218 {
219 value = null;
220 }
221
222 nameValuePairs [ i ] = new Pair ( pair.name, value );
223
224 setText ( nameValuePairs [ i ] );
225 }
226
227 labeledFieldsPanel2.addKeyListener ( this );
228
229 if ( changeListener != null )
230 {
231 changeListener.stateChanged ( changeEvent );
232 }
233 }
234 }
235
236 //////////////////////////////////////////////////////////////////////
237 //////////////////////////////////////////////////////////////////////
238 }