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 }