1
35
36
39
40 import javax.swing.*;
41 import javax.swing.text.*;
42 import javax.swing.border.*;
43
44 import java.awt.*;
45 import java.awt.event.*;
46 import java.util.*;
47
48
53
54 public class LayoutControlPanel extends JPanel implements SwingConstants {
55
56 private boolean absolutePositions;
57 private DirectionPanel textPosition = null;
58 private DirectionPanel labelAlignment = null;
59 private ButtonDemo demo = null;
60
61
63 LayoutControlPanel(ButtonDemo demo) {
64 this.demo = demo;
65
66
68 setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
69 setAlignmentX(LEFT_ALIGNMENT);
70 setAlignmentY(TOP_ALIGNMENT);
71
72 JLabel l;
73
74 absolutePositions = true;
106
108 textPosition = new DirectionPanel(true, "E", new TextPositionListener());
109 labelAlignment = new DirectionPanel(true, "C", new LabelAlignmentListener());
110
111 for(int i = 0; i < demo.getCurrentControls().size(); i++) {
114 Component c = (Component) demo.getCurrentControls().elementAt(i);
115 setPosition(c, RIGHT, CENTER);
116 setAlignment(c,CENTER,CENTER);
117 }
118
119 l = new JLabel("Text Position:");
120 add(l);
121 add(textPosition);
122
123 add(Box.createRigidArea(demo.VGAP20));
124
125 l = new JLabel("Content Alignment:");
126 add(l);
127 add(labelAlignment);
128
129 add(Box.createGlue());
130 }
131
132
133 class OrientationChangeListener implements ActionListener {
134 public void actionPerformed( ActionEvent e ) {
135 if( !e.getActionCommand().equals("OrientationChanged") ){
136 return;
137 }
138 if( absolutePositions ){
139 return;
140 }
141
142 String currentTextPosition = textPosition.getSelection();
143 if( currentTextPosition.equals("NW") )
144 textPosition.setSelection("NE");
145 else if( currentTextPosition.equals("NE") )
146 textPosition.setSelection("NW");
147 else if( currentTextPosition.equals("E") )
148 textPosition.setSelection("W");
149 else if( currentTextPosition.equals("W") )
150 textPosition.setSelection("E");
151 else if( currentTextPosition.equals("SE") )
152 textPosition.setSelection("SW");
153 else if( currentTextPosition.equals("SW") )
154 textPosition.setSelection("SE");
155
156 String currentLabelAlignment = labelAlignment.getSelection();
157 if( currentLabelAlignment.equals("NW") )
158 labelAlignment.setSelection("NE");
159 else if( currentLabelAlignment.equals("NE") )
160 labelAlignment.setSelection("NW");
161 else if( currentLabelAlignment.equals("E") )
162 labelAlignment.setSelection("W");
163 else if( currentLabelAlignment.equals("W") )
164 labelAlignment.setSelection("E");
165 else if( currentLabelAlignment.equals("SE") )
166 labelAlignment.setSelection("SW");
167 else if( currentLabelAlignment.equals("SW") )
168 labelAlignment.setSelection("SE");
169 }
170 }
171
172 class PositioningListener implements ItemListener {
173
174 public void itemStateChanged(ItemEvent e) {
175 JRadioButton rb = (JRadioButton) e.getSource();
176 if(rb.getText().equals("Absolute") && rb.isSelected()) {
177 absolutePositions = true;
178 } else if(rb.getText().equals("Relative") && rb.isSelected()) {
179 absolutePositions = false;
180 }
181
182 for(int i = 0; i < demo.getCurrentControls().size(); i++) {
183 Component c = (Component) demo.getCurrentControls().elementAt(i);
184 int hPos, vPos, hAlign, vAlign;
185 if( c instanceof AbstractButton ) {
186 hPos = ((AbstractButton)c).getHorizontalTextPosition();
187 vPos = ((AbstractButton)c).getVerticalTextPosition();
188 hAlign = ((AbstractButton)c).getHorizontalAlignment();
189 vAlign = ((AbstractButton)c).getVerticalAlignment();
190 } else if( c instanceof JLabel ) {
191 hPos = ((JLabel)c).getHorizontalTextPosition();
192 vPos = ((JLabel)c).getVerticalTextPosition();
193 hAlign = ((JLabel)c).getHorizontalAlignment();
194 vAlign = ((JLabel)c).getVerticalAlignment();
195 } else {
196 continue;
197 }
198 setPosition(c, hPos, vPos);
199 setAlignment(c, hAlign, vAlign);
200 }
201
202 demo.invalidate();
203 demo.validate();
204 demo.repaint();
205 }
206 };
207
208
209 class TextPositionListener implements ActionListener {
211 public void actionPerformed(ActionEvent e) {
212 JRadioButton rb = (JRadioButton) e.getSource();
213 if(!rb.isSelected()) {
214 return;
215 }
216 String cmd = rb.getActionCommand();
217 int hPos, vPos;
218 if(cmd.equals("NW")) {
219 hPos = LEFT; vPos = TOP;
220 } else if(cmd.equals("N")) {
221 hPos = CENTER; vPos = TOP;
222 } else if(cmd.equals("NE")) {
223 hPos = RIGHT; vPos = TOP;
224 } else if(cmd.equals("W")) {
225 hPos = LEFT; vPos = CENTER;
226 } else if(cmd.equals("C")) {
227 hPos = CENTER; vPos = CENTER;
228 } else if(cmd.equals("E")) {
229 hPos = RIGHT; vPos = CENTER;
230 } else if(cmd.equals("SW")) {
231 hPos = LEFT; vPos = BOTTOM;
232 } else if(cmd.equals("S")) {
233 hPos = CENTER; vPos = BOTTOM;
234 } else {
235 hPos = RIGHT; vPos = BOTTOM;
236 }
237 for(int i = 0; i < demo.getCurrentControls().size(); i++) {
238 Component c = (Component) demo.getCurrentControls().elementAt(i);
239 setPosition(c, hPos, vPos);
240 }
241 demo.invalidate();
242 demo.validate();
243 demo.repaint();
244 }
245 };
246
247
248 class LabelAlignmentListener implements ActionListener {
250 public void actionPerformed(ActionEvent e) {
251 JRadioButton rb = (JRadioButton) e.getSource();
252 if(!rb.isSelected()) {
253 return;
254 }
255 String cmd = rb.getActionCommand();
256 int hPos, vPos;
257 if(cmd.equals("NW")) {
258 hPos = LEFT; vPos = TOP;
259 } else if(cmd.equals("N")) {
260 hPos = CENTER; vPos = TOP;
261 } else if(cmd.equals("NE")) {
262 hPos = RIGHT; vPos = TOP;
263 } else if(cmd.equals("W")) {
264 hPos = LEFT; vPos = CENTER;
265 } else if(cmd.equals("C")) {
266 hPos = CENTER; vPos = CENTER;
267 } else if(cmd.equals("E")) {
268 hPos = RIGHT; vPos = CENTER;
269 } else if(cmd.equals("SW")) {
270 hPos = LEFT; vPos = BOTTOM;
271 } else if(cmd.equals("S")) {
272 hPos = CENTER; vPos = BOTTOM;
273 } else {
274 hPos = RIGHT; vPos = BOTTOM;
275 }
276 for(int i = 0; i < demo.getCurrentControls().size(); i++) {
277 Component c = (Component) demo.getCurrentControls().elementAt(i);
278 setAlignment(c,hPos,vPos);
279 c.invalidate();
280 }
281 demo.invalidate();
282 demo.validate();
283 demo.repaint();
284 }
285 };
286
287 void setPosition(Component c, int hPos, int vPos) {
289 boolean ltr = true;
290 ltr = c.getComponentOrientation().isLeftToRight();
291 if( absolutePositions ) {
292 if( hPos == LEADING ) {
293 hPos = ltr ? LEFT : RIGHT;
294 } else if( hPos == TRAILING ) {
295 hPos = ltr ? RIGHT : LEFT;
296 }
297 } else {
298 if( hPos == LEFT ) {
299 hPos = ltr ? LEADING : TRAILING;
300 } else if( hPos == RIGHT ) {
301 hPos = ltr ? TRAILING : LEADING;
302 }
303 }
304 if(c instanceof AbstractButton) {
305 AbstractButton x = (AbstractButton) c;
306 x.setHorizontalTextPosition(hPos);
307 x.setVerticalTextPosition(vPos);
308 } else if(c instanceof JLabel) {
309 JLabel x = (JLabel) c;
310 x.setHorizontalTextPosition(hPos);
311 x.setVerticalTextPosition(vPos);
312 }
313 }
314
315 void setAlignment(Component c, int hPos, int vPos) {
316 boolean ltr = true;
317 ltr = c.getComponentOrientation().isLeftToRight();
318 if( absolutePositions ) {
319 if( hPos == LEADING ) {
320 hPos = ltr ? LEFT : RIGHT;
321 } else if( hPos == TRAILING ) {
322 hPos = ltr ? RIGHT : LEFT;
323 }
324 } else {
325 if( hPos == LEFT ) {
326 hPos = ltr ? LEADING : TRAILING;
327 } else if( hPos == RIGHT ) {
328 hPos = ltr ? TRAILING : LEADING;
329 }
330 }
331 if(c instanceof AbstractButton) {
332 AbstractButton x = (AbstractButton) c;
333 x.setHorizontalAlignment(hPos);
334 x.setVerticalAlignment(vPos);
335 } else if(c instanceof JLabel) {
336 JLabel x = (JLabel) c;
337 x.setHorizontalAlignment(hPos);
338 x.setVerticalAlignment(vPos);
339 }
340 }
341 }
342