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
010 /*********************************************************************
011 * A JPanel of JCheckBoxes with identifying JLabels.
012 *
013 * <p>
014 * Example:
015 * <code>
016 * <pre>
017 * CheckBoxPanel checkBoxPanel = new CheckBoxPanel (
018 * new String [ ] { "From", "To", "Date", "Subject" } );
019 * </pre>
020 * </code>
021 * </p>
022 *
023 * @version
024 * 2001-10-12
025 * @since
026 * 2001-08-08
027 * @author
028 * <a href="https://www.croftsoft.com/">David Wallace Croft</a>
029 *********************************************************************/
030
031 public final class CheckBoxPanel
032 extends JPanel
033 //////////////////////////////////////////////////////////////////////
034 //////////////////////////////////////////////////////////////////////
035 {
036
037 private final Map labelNameToCheckBoxMap = new HashMap ( );
038
039 //////////////////////////////////////////////////////////////////////
040 //////////////////////////////////////////////////////////////////////
041
042 public CheckBoxPanel (
043 String [ ] labelNames,
044 String [ ] descriptors,
045 Color panelBackgroundColor )
046 //////////////////////////////////////////////////////////////////////
047 {
048 super ( new GridBagLayout ( ), true );
049
050 NullArgumentException.check ( labelNames );
051
052 if ( panelBackgroundColor != null )
053 {
054 setBackground ( panelBackgroundColor );
055 }
056
057 if ( descriptors != null )
058 {
059 if ( descriptors.length != labelNames.length )
060 {
061 throw new IllegalArgumentException (
062 "descriptors.length != labelNames.length" );
063 }
064 }
065
066 GridBagConstraints gridBagConstraints = new GridBagConstraints ( );
067
068 gridBagConstraints.fill = GridBagConstraints.HORIZONTAL;
069
070 // gridBagConstraints.ipadx = 10;
071
072 // gridBagConstraints.ipady = 10;
073
074 Insets checkBoxInsets = new Insets ( 0, 10, 0, 0 );
075
076 Insets labelInsets = new Insets ( 0, 0, 0, 10 );
077
078 for ( int i = 0; i < labelNames.length; i++ )
079 {
080 gridBagConstraints.gridx = 0;
081
082 gridBagConstraints.gridy = i;
083
084 gridBagConstraints.weightx = 0.0;
085
086 gridBagConstraints.insets = checkBoxInsets;
087
088 JCheckBox jCheckBox = new JCheckBox ( );
089
090 add ( jCheckBox, gridBagConstraints );
091
092 gridBagConstraints.gridx = 1;
093
094 if ( descriptors == null )
095 {
096 gridBagConstraints.weightx = 1.0;
097 }
098
099 gridBagConstraints.insets = labelInsets;
100
101 String labelName = labelNames [ i ];
102
103 labelNameToCheckBoxMap.put ( labelName, jCheckBox );
104
105 add ( new JLabel ( labelName ), gridBagConstraints );
106
107 if ( descriptors != null )
108 {
109 gridBagConstraints.gridx = 2;
110
111 gridBagConstraints.weightx = 1.0;
112
113 add ( new JLabel ( descriptors [ i ] ), gridBagConstraints );
114 }
115
116 /*
117 Is this necessary? If so, modify in LabeledFieldsPanel2 as well.
118
119 if ( panelBackgroundColor != null )
120 {
121 labelName.setBackground ( panelBackgroundColor );
122 }
123 */
124 }
125 }
126
127 public CheckBoxPanel ( String [ ] labelNames )
128 //////////////////////////////////////////////////////////////////////
129 {
130 this ( labelNames, null, null );
131 }
132
133 //////////////////////////////////////////////////////////////////////
134 // accessors
135 //////////////////////////////////////////////////////////////////////
136
137 public String [ ] getLabelNames ( )
138 //////////////////////////////////////////////////////////////////////
139 {
140 return ( String [ ] )
141 labelNameToCheckBoxMap.keySet ( ).toArray ( new String [ ] { } );
142 }
143
144 public String [ ] getSelectedLabelNames ( )
145 //////////////////////////////////////////////////////////////////////
146 {
147 java.util.List selectedLabelNamesList = new ArrayList ( );
148
149 Iterator iterator = labelNameToCheckBoxMap.keySet ( ).iterator ( );
150
151 while ( iterator.hasNext ( ) )
152 {
153 String labelName = ( String ) iterator.next ( );
154
155 JCheckBox jCheckBox
156 = ( JCheckBox ) labelNameToCheckBoxMap.get ( labelName );
157
158 if ( jCheckBox.isSelected ( ) )
159 {
160 selectedLabelNamesList.add ( labelName );
161 }
162 }
163
164 return ( String [ ] )
165 selectedLabelNamesList.toArray ( new String [ ] { } );
166 }
167
168 public boolean isSelected ( String labelName )
169 //////////////////////////////////////////////////////////////////////
170 {
171 NullArgumentException.check ( labelName );
172
173 JCheckBox jCheckBox
174 = ( JCheckBox ) labelNameToCheckBoxMap.get ( labelName );
175
176 if ( jCheckBox == null )
177 {
178 throw new IllegalArgumentException (
179 "unknown labelName: " + labelName );
180 }
181
182 return jCheckBox.isSelected ( );
183 }
184
185 //////////////////////////////////////////////////////////////////////
186 // mutators
187 //////////////////////////////////////////////////////////////////////
188
189 public void setAllSelected ( boolean selected )
190 //////////////////////////////////////////////////////////////////////
191 {
192 Iterator iterator = labelNameToCheckBoxMap.values ( ).iterator ( );
193
194 while ( iterator.hasNext ( ) )
195 {
196 JCheckBox jCheckBox = ( JCheckBox ) iterator.next ( );
197
198 jCheckBox.setSelected ( selected );
199 }
200 }
201
202 public void setSelected (
203 String labelName,
204 boolean selected )
205 //////////////////////////////////////////////////////////////////////
206 {
207 NullArgumentException.check ( labelName );
208
209 JCheckBox jCheckBox
210 = ( JCheckBox ) labelNameToCheckBoxMap.get ( labelName );
211
212 if ( jCheckBox == null )
213 {
214 throw new IllegalArgumentException (
215 "unknown labelName: " + labelName );
216 }
217
218 jCheckBox.setSelected ( selected );
219 }
220
221 //////////////////////////////////////////////////////////////////////
222 //////////////////////////////////////////////////////////////////////
223 }