ButtonDemo.java  
1   /*
2    * @(#)ButtonDemo.java  1.14 04/07/26
3    * 
4    * Copyright (c) 2004 Sun Microsystems, Inc. All Rights Reserved.
5    * 
6    * Redistribution and use in source and binary forms, with or without
7    * modification, are permitted provided that the following conditions are met:
8    * 
9    * -Redistribution of source code must retain the above copyright notice, this
10   *  list of conditions and the following disclaimer.
11   * 
12   * -Redistribution in binary form must reproduce the above copyright notice, 
13   *  this list of conditions and the following disclaimer in the documentation
14   *  and/or other materials provided with the distribution.
15   * 
16   * Neither the name of Sun Microsystems, Inc. or the names of contributors may 
17   * be used to endorse or promote products derived from this software without 
18   * specific prior written permission.
19   * 
20   * This software is provided "AS IS," without a warranty of any kind. ALL 
21   * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING
22   * ANY IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE
23   * OR NON-INFRINGEMENT, ARE HEREBY EXCLUDED. SUN MIDROSYSTEMS, INC. ("SUN")
24   * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY LICENSEE
25   * AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR ITS
26   * DERIVATIVES. IN NO EVENT WILL SUN OR ITS LICENSORS BE LIABLE FOR ANY LOST 
27   * REVENUE, PROFIT OR DATA, OR FOR DIRECT, INDIRECT, SPECIAL, CONSEQUENTIAL, 
28   * INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER CAUSED AND REGARDLESS OF THE THEORY 
29   * OF LIABILITY, ARISING OUT OF THE USE OF OR INABILITY TO USE THIS SOFTWARE, 
30   * EVEN IF SUN HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
31   * 
32   * You acknowledge that this software is not designed, licensed or intended
33   * for use in the design, construction, operation or maintenance of any
34   * nuclear facility.
35   */
36  
37  /*
38   * @(#)ButtonDemo.java  1.14 04/07/26
39   */
40  
41  
42  import javax.swing.*;
43  import javax.swing.event.*;
44  import javax.swing.text.*;
45  import javax.swing.border.*;
46  import javax.swing.colorchooser.*;
47  import javax.swing.filechooser.*;
48  import javax.accessibility.*;
49  
50  import java.awt.*;
51  import java.awt.event.*;
52  import java.beans.*;
53  import java.util.*;
54  import java.io.*;
55  import java.applet.*;
56  import java.net.*;
57  
58  /**
59   * JButton, JRadioButton, JToggleButton, JCheckBox Demos
60   *
61   * @version 1.14 07/26/04
62   * @author Jeff Dinkins
63   */
64  public class ButtonDemo extends DemoModule implements ChangeListener {
65  
66      JTabbedPane tab;
67  
68      JPanel buttonPanel = new JPanel();
69      JPanel checkboxPanel = new JPanel();
70      JPanel radioButtonPanel = new JPanel();
71      JPanel toggleButtonPanel = new JPanel();
72  
73      Vector buttons = new Vector();
74      Vector checkboxes = new Vector();
75      Vector radiobuttons = new Vector();
76      Vector togglebuttons = new Vector();
77  
78      Vector currentControls = buttons;
79  
80      JButton button;
81      JCheckBox check;
82      JRadioButton radio;
83      JToggleButton toggle;
84  
85      EmptyBorder border5 = new EmptyBorder(5,5,5,5);
86      EmptyBorder border10 = new EmptyBorder(10,10,10,10);
87  
88      ItemListener buttonDisplayListener = null;
89      ItemListener buttonPadListener = null;
90  
91      Insets insets0 = new Insets(0,0,0,0);
92      Insets insets10 = new Insets(10,10,10,10);
93  
94      /**
95       * main method allows us to run as a standalone demo.
96       */
97      public static void main(String[] args) {
98      ButtonDemo demo = new ButtonDemo(null);
99      demo.mainImpl();
100     }
101 
102     /**
103      * ButtonDemo Constructor
104      */
105     public ButtonDemo(SwingSet2 swingset) {
106     // Set the title for this demo, and an icon used to represent this
107     // demo inside the SwingSet2 app.
108     super(swingset, "ButtonDemo", "toolbar/JButton.gif");
109 
110     tab = new JTabbedPane();
111     tab.getModel().addChangeListener(this);
112 
113     JPanel demo = getDemoPanel();
114     demo.setLayout(new BoxLayout(demo, BoxLayout.Y_AXIS));
115     demo.add(tab);
116 
117     addButtons();
118     addRadioButtons();
119     addCheckBoxes();
120     // addToggleButtons();
121     currentControls = buttons;
122     }
123 
124     public void addButtons() {
125     tab.addTab(getString("ButtonDemo.buttons"), buttonPanel);
126     buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));
127         buttonPanel.setBorder(border5);
128 
129     JPanel p1 = createVerticalPanel(true);
130     p1.setAlignmentY(TOP_ALIGNMENT);
131     buttonPanel.add(p1);
132 
133     // Text Buttons
134     JPanel p2 = createHorizontalPanel(false);
135     p1.add(p2);
136     p2.setBorder(new CompoundBorder(new TitledBorder(null, getString("ButtonDemo.textbuttons"),
137                               TitledBorder.LEFT, TitledBorder.TOP), border5));
138 
139     buttons.add(p2.add(new JButton(getString("ButtonDemo.button1"))));
140     p2.add(Box.createRigidArea(HGAP10));
141 
142     buttons.add(p2.add(new JButton(getString("ButtonDemo.button2"))));
143     p2.add(Box.createRigidArea(HGAP10));
144 
145     buttons.add(p2.add(new JButton(getString("ButtonDemo.button3"))));
146 
147 
148     // Image Buttons
149     p1.add(Box.createRigidArea(VGAP30));
150     JPanel p3 = createHorizontalPanel(false);
151     p1.add(p3);
152     p3.setLayout(new BoxLayout(p3, BoxLayout.X_AXIS));
153     p3.setBorder(new TitledBorder(null, getString("ButtonDemo.imagebuttons"),
154                      TitledBorder.LEFT, TitledBorder.TOP));
155 
156     // home image button
157     String description = getString("ButtonDemo.phone");
158     button = new JButton(createImageIcon("buttons/b1.gif", description));
159     button.setPressedIcon(createImageIcon("buttons/b1p.gif", description));
160     button.setRolloverIcon(createImageIcon("buttons/b1r.gif", description));
161     button.setDisabledIcon(createImageIcon("buttons/b1d.gif", description));
162     button.setMargin(new Insets(0,0,0,0));
163     p3.add(button);
164     buttons.add(button);
165     p3.add(Box.createRigidArea(HGAP10));
166 
167     // write image button
168     description = getString("ButtonDemo.write");
169     button = new JButton(createImageIcon("buttons/b2.gif", description));
170     button.setPressedIcon(createImageIcon("buttons/b2p.gif", description));
171     button.setRolloverIcon(createImageIcon("buttons/b2r.gif", description));
172     button.setDisabledIcon(createImageIcon("buttons/b2d.gif", description));
173     button.setMargin(new Insets(0,0,0,0));
174     p3.add(button);
175     buttons.add(button);
176     p3.add(Box.createRigidArea(HGAP10));
177 
178     // write image button
179     description = getString("ButtonDemo.peace");
180     button = new JButton(createImageIcon("buttons/b3.gif", description));
181     button.setPressedIcon(createImageIcon("buttons/b3p.gif", description));
182     button.setRolloverIcon(createImageIcon("buttons/b3r.gif", description));
183     button.setDisabledIcon(createImageIcon("buttons/b3d.gif", description));
184     button.setMargin(new Insets(0,0,0,0));
185     p3.add(button);
186     buttons.add(button);
187 
188     p1.add(Box.createVerticalGlue());
189 
190     buttonPanel.add(Box.createHorizontalGlue());
191     currentControls = buttons;
192     buttonPanel.add(createControls());
193     }
194 
195     public void addRadioButtons() {
196     ButtonGroup group = new ButtonGroup();
197 
198     tab.addTab(getString("ButtonDemo.radiobuttons"), radioButtonPanel);
199     radioButtonPanel.setLayout(new BoxLayout(radioButtonPanel, BoxLayout.X_AXIS));
200         radioButtonPanel.setBorder(border5);
201 
202     JPanel p1 = createVerticalPanel(true);
203     p1.setAlignmentY(TOP_ALIGNMENT);
204     radioButtonPanel.add(p1);
205 
206     // Text Radio Buttons
207     JPanel p2 = createHorizontalPanel(false);
208     p1.add(p2);
209     p2.setBorder(new CompoundBorder(
210                       new TitledBorder(
211             null, getString("ButtonDemo.textradiobuttons"),
212             TitledBorder.LEFT, TitledBorder.TOP), border5)
213     );
214 
215         radio = (JRadioButton)p2.add(
216                 new JRadioButton(getString("ButtonDemo.radio1")));
217         group.add(radio);
218     radiobuttons.add(radio);
219     p2.add(Box.createRigidArea(HGAP10));
220 
221     radio = (JRadioButton)p2.add(
222                 new JRadioButton(getString("ButtonDemo.radio2")));
223         group.add(radio);
224     radiobuttons.add(radio);
225     p2.add(Box.createRigidArea(HGAP10));
226 
227     radio = (JRadioButton)p2.add(
228                 new JRadioButton(getString("ButtonDemo.radio3")));
229         group.add(radio);
230     radiobuttons.add(radio);
231 
232     // Image Radio Buttons
233         group = new ButtonGroup();
234     p1.add(Box.createRigidArea(VGAP30));
235     JPanel p3 = createHorizontalPanel(false);
236     p1.add(p3);
237     p3.setLayout(new BoxLayout(p3, BoxLayout.X_AXIS));
238     p3.setBorder(new TitledBorder(null, getString("ButtonDemo.imageradiobuttons"),
239                      TitledBorder.LEFT, TitledBorder.TOP));
240 
241     // image radio button 1
242     String description = getString("ButtonDemo.customradio");
243     String text = getString("ButtonDemo.radio1");
244     radio = new JRadioButton(text, createImageIcon("buttons/rb.gif", description));
245     radio.setPressedIcon(createImageIcon("buttons/rbp.gif", description));
246     radio.setRolloverIcon(createImageIcon("buttons/rbr.gif", description));
247     radio.setRolloverSelectedIcon(createImageIcon("buttons/rbrs.gif", description));
248     radio.setSelectedIcon(createImageIcon("buttons/rbs.gif", description));
249     radio.setMargin(new Insets(0,0,0,0));
250     group.add(radio);
251     p3.add(radio);
252     radiobuttons.add(radio);
253     p3.add(Box.createRigidArea(HGAP20));
254 
255     // image radio button 2
256     text = getString("ButtonDemo.radio2");
257     radio = new JRadioButton(text, createImageIcon("buttons/rb.gif", description));
258     radio.setPressedIcon(createImageIcon("buttons/rbp.gif", description));
259     radio.setRolloverIcon(createImageIcon("buttons/rbr.gif", description));
260     radio.setRolloverSelectedIcon(createImageIcon("buttons/rbrs.gif", description));
261     radio.setSelectedIcon(createImageIcon("buttons/rbs.gif", description));
262     radio.setMargin(new Insets(0,0,0,0));
263     group.add(radio);
264     p3.add(radio);
265     radiobuttons.add(radio);
266     p3.add(Box.createRigidArea(HGAP20));
267 
268     // image radio button 3
269     text = getString("ButtonDemo.radio3");
270     radio = new JRadioButton(text, createImageIcon("buttons/rb.gif", description));
271     radio.setPressedIcon(createImageIcon("buttons/rbp.gif", description));
272     radio.setRolloverIcon(createImageIcon("buttons/rbr.gif", description));
273     radio.setRolloverSelectedIcon(createImageIcon("buttons/rbrs.gif", description));
274     radio.setSelectedIcon(createImageIcon("buttons/rbs.gif", description));
275     radio.setMargin(new Insets(0,0,0,0));
276     group.add(radio);
277     radiobuttons.add(radio);
278     p3.add(radio);
279 
280     // verticaly glue fills out the rest of the box
281     p1.add(Box.createVerticalGlue());
282 
283     radioButtonPanel.add(Box.createHorizontalGlue());
284     currentControls = radiobuttons;
285     radioButtonPanel.add(createControls());
286     }
287 
288 
289     public void addCheckBoxes() {
290     tab.addTab(getString("ButtonDemo.checkboxes"), checkboxPanel);
291     checkboxPanel.setLayout(new BoxLayout(checkboxPanel, BoxLayout.X_AXIS));
292         checkboxPanel.setBorder(border5);
293 
294     JPanel p1 = createVerticalPanel(true);
295     p1.setAlignmentY(TOP_ALIGNMENT);
296     checkboxPanel.add(p1);
297 
298     // Text Radio Buttons
299     JPanel p2 = createHorizontalPanel(false);
300     p1.add(p2);
301     p2.setBorder(new CompoundBorder(
302                       new TitledBorder(
303             null, getString("ButtonDemo.textcheckboxes"),
304             TitledBorder.LEFT, TitledBorder.TOP), border5)
305     );
306 
307     checkboxes.add(p2.add(new JCheckBox(getString("ButtonDemo.check1"))));
308     p2.add(Box.createRigidArea(HGAP10));
309 
310     checkboxes.add(p2.add(new JCheckBox(getString("ButtonDemo.check2"))));
311     p2.add(Box.createRigidArea(HGAP10));
312 
313     checkboxes.add(p2.add(new JCheckBox(getString("ButtonDemo.check3"))));
314 
315     // Image Radio Buttons
316     p1.add(Box.createRigidArea(VGAP30));
317     JPanel p3 = createHorizontalPanel(false);
318     p1.add(p3);
319     p3.setLayout(new BoxLayout(p3, BoxLayout.X_AXIS));
320     p3.setBorder(new TitledBorder(null, getString("ButtonDemo.imagecheckboxes"),
321                      TitledBorder.LEFT, TitledBorder.TOP));
322 
323     // image checkbox 1
324     String description = getString("ButtonDemo.customcheck");
325     String text = getString("ButtonDemo.check1");
326     check = new JCheckBox(text, createImageIcon("buttons/cb.gif", description));
327     check.setRolloverIcon(createImageIcon("buttons/cbr.gif", description));
328     check.setRolloverSelectedIcon(createImageIcon("buttons/cbrs.gif", description));
329     check.setSelectedIcon(createImageIcon("buttons/cbs.gif", description));
330     check.setMargin(new Insets(0,0,0,0));
331     p3.add(check);
332     checkboxes.add(check);
333     p3.add(Box.createRigidArea(HGAP20));
334 
335     // image checkbox 2
336     text = getString("ButtonDemo.check2");
337     check = new JCheckBox(text, createImageIcon("buttons/cb.gif", description));
338     check.setRolloverIcon(createImageIcon("buttons/cbr.gif", description));
339     check.setRolloverSelectedIcon(createImageIcon("buttons/cbrs.gif", description));
340     check.setSelectedIcon(createImageIcon("buttons/cbs.gif", description));
341     check.setMargin(new Insets(0,0,0,0));
342     p3.add(check);
343     checkboxes.add(check);
344     p3.add(Box.createRigidArea(HGAP20));
345 
346     // image checkbox 3
347     text = getString("ButtonDemo.check3");
348     check = new JCheckBox(text, createImageIcon("buttons/cb.gif", description));
349     check.setRolloverIcon(createImageIcon("buttons/cbr.gif", description));
350     check.setRolloverSelectedIcon(createImageIcon("buttons/cbrs.gif", description));
351     check.setSelectedIcon(createImageIcon("buttons/cbs.gif", description));
352     check.setMargin(new Insets(0,0,0,0));
353     p3.add(check);
354     checkboxes.add(check);
355 
356     // verticaly glue fills out the rest of the box
357     p1.add(Box.createVerticalGlue());
358 
359     checkboxPanel.add(Box.createHorizontalGlue());
360     currentControls = checkboxes;
361     checkboxPanel.add(createControls());
362     }
363 
364     public void addToggleButtons() {
365     tab.addTab(getString("ButtonDemo.togglebuttons"), toggleButtonPanel);
366     }
367 
368     public JPanel createControls() {
369         JPanel controls = new JPanel() {
370             public Dimension getMaximumSize() {
371                 return new Dimension(300, super.getMaximumSize().height);
372             }
373         };
374         controls.setLayout(new BoxLayout(controls, BoxLayout.Y_AXIS));
375         controls.setAlignmentY(TOP_ALIGNMENT);
376         controls.setAlignmentX(LEFT_ALIGNMENT);
377 
378         JPanel buttonControls = createHorizontalPanel(true);
379         buttonControls.setAlignmentY(TOP_ALIGNMENT);
380         buttonControls.setAlignmentX(LEFT_ALIGNMENT);
381 
382         JPanel leftColumn = createVerticalPanel(false);
383         leftColumn.setAlignmentX(LEFT_ALIGNMENT);
384         leftColumn.setAlignmentY(TOP_ALIGNMENT);
385 
386         JPanel rightColumn = new LayoutControlPanel(this);
387 
388         buttonControls.add(leftColumn);
389         buttonControls.add(Box.createRigidArea(HGAP20));
390         buttonControls.add(rightColumn);
391         buttonControls.add(Box.createRigidArea(HGAP20));
392 
393         controls.add(buttonControls);
394 
395     createListeners();
396 
397         // Display Options
398         JLabel l = new JLabel(getString("ButtonDemo.controlpanel_label"));
399         leftColumn.add(l);
400 
401         JCheckBox bordered = new JCheckBox(getString("ButtonDemo.paintborder"));
402         bordered.setActionCommand("PaintBorder"); 
403         bordered.setToolTipText(getString("ButtonDemo.paintborder_tooltip"));
404         bordered.setMnemonic(getMnemonic("ButtonDemo.paintborder_mnemonic"));
405     if (currentControls == buttons) {
406             bordered.setSelected(true);
407     }
408         bordered.addItemListener(buttonDisplayListener);
409         leftColumn.add(bordered);
410 
411         JCheckBox focused = new JCheckBox(getString("ButtonDemo.paintfocus"));
412         focused.setActionCommand("PaintFocus"); 
413         focused.setToolTipText(getString("ButtonDemo.paintfocus_tooltip"));
414         focused.setMnemonic(getMnemonic("ButtonDemo.paintfocus_mnemonic"));
415         focused.setSelected(true);
416         focused.addItemListener(buttonDisplayListener);
417         leftColumn.add(focused);
418 
419         JCheckBox enabled = new JCheckBox(getString("ButtonDemo.enabled"));
420         enabled.setActionCommand("Enabled"); 
421         enabled.setToolTipText(getString("ButtonDemo.enabled_tooltip"));
422         enabled.setSelected(true);
423         enabled.addItemListener(buttonDisplayListener);
424         enabled.setMnemonic(getMnemonic("ButtonDemo.enabled_mnemonic"));
425         leftColumn.add(enabled);
426 
427         JCheckBox filled = new JCheckBox(getString("ButtonDemo.contentfilled"));
428         filled.setActionCommand("ContentFilled"); 
429         filled.setToolTipText(getString("ButtonDemo.contentfilled_tooltip"));
430         filled.setSelected(true);
431         filled.addItemListener(buttonDisplayListener);
432         filled.setMnemonic(getMnemonic("ButtonDemo.contentfilled_mnemonic"));
433         leftColumn.add(filled);
434 
435         leftColumn.add(Box.createRigidArea(VGAP20));
436 
437         l = new JLabel(getString("ButtonDemo.padamount_label"));
438         leftColumn.add(l);
439         ButtonGroup group = new ButtonGroup();
440         JRadioButton defaultPad = new JRadioButton(getString("ButtonDemo.default"));
441         defaultPad.setToolTipText(getString("ButtonDemo.default_tooltip"));
442         defaultPad.setMnemonic(getMnemonic("ButtonDemo.default_mnemonic"));
443         defaultPad.addItemListener(buttonPadListener);
444         group.add(defaultPad);
445         defaultPad.setSelected(true);
446         leftColumn.add(defaultPad);
447 
448         JRadioButton zeroPad = new JRadioButton(getString("ButtonDemo.zero"));
449         zeroPad.setActionCommand("ZeroPad"); 
450         zeroPad.setToolTipText(getString("ButtonDemo.zero_tooltip"));
451         zeroPad.addItemListener(buttonPadListener);
452         zeroPad.setMnemonic(getMnemonic("ButtonDemo.zero_mnemonic"));
453         group.add(zeroPad);
454         leftColumn.add(zeroPad);
455 
456         JRadioButton tenPad = new JRadioButton(getString("ButtonDemo.ten"));
457         tenPad.setActionCommand("TenPad"); 
458         tenPad.setMnemonic(getMnemonic("ButtonDemo.ten_mnemonic"));
459         tenPad.setToolTipText(getString("ButtonDemo.ten_tooltip"));
460         tenPad.addItemListener(buttonPadListener);
461         group.add(tenPad);
462         leftColumn.add(tenPad);
463 
464         leftColumn.add(Box.createRigidArea(VGAP20));
465     return controls;
466     }
467     
468     public void createListeners() {
469     buttonDisplayListener = new ItemListener() {
470         Component c;
471         AbstractButton b;
472         
473         public void itemStateChanged(ItemEvent e) {
474             JCheckBox cb = (JCheckBox) e.getSource();
475             String command = cb.getActionCommand();
476             if(command == "Enabled") {
477             for(int i = 0; i < currentControls.size(); i++) {
478                 c = (Component) currentControls.elementAt(i);
479                 c.setEnabled(cb.isSelected());
480                 c.invalidate();
481             }
482             } else if(command == "PaintBorder") {
483             c = (Component) currentControls.elementAt(0);
484             if(c instanceof AbstractButton) {
485                 for(int i = 0; i < currentControls.size(); i++) {
486                 b = (AbstractButton) currentControls.elementAt(i);
487                 b.setBorderPainted(cb.isSelected());
488                 b.invalidate();
489                 }
490             }
491             } else if(command == "PaintFocus") {
492             c = (Component) currentControls.elementAt(0);
493             if(c instanceof AbstractButton) {
494                 for(int i = 0; i < currentControls.size(); i++) {
495                 b = (AbstractButton) currentControls.elementAt(i);
496                 b.setFocusPainted(cb.isSelected());
497                 b.invalidate();
498                 }
499             }
500             } else if(command == "ContentFilled") {
501             c = (Component) currentControls.elementAt(0);
502             if(c instanceof AbstractButton) {
503                 for(int i = 0; i < currentControls.size(); i++) {
504                 b = (AbstractButton) currentControls.elementAt(i);
505                 b.setContentAreaFilled(cb.isSelected());
506                 b.invalidate();
507                 }
508             }
509             }
510             invalidate();
511             validate();
512             repaint();
513         }
514     };
515 
516     buttonPadListener = new ItemListener() {
517         Component c;
518         AbstractButton b;
519         
520         public void itemStateChanged(ItemEvent e) {
521             // *** pad = 0
522             int pad = -1;
523             JRadioButton rb = (JRadioButton) e.getSource();
524             String command = rb.getActionCommand();
525             if(command == "ZeroPad" && rb.isSelected()) {
526             pad = 0;
527             } else if(command == "TenPad" && rb.isSelected()) {
528             pad = 10;
529             }
530             
531             for(int i = 0; i < currentControls.size(); i++) {
532             b = (AbstractButton) currentControls.elementAt(i);
533             if(pad == -1) {
534                 b.setMargin(null);
535             } else if(pad == 0) {
536                 b.setMargin(insets0);
537             } else {
538                 b.setMargin(insets10);
539             }
540             }
541             invalidate();
542             validate();
543             repaint();
544         }
545     };
546     }
547     
548     public void stateChanged(ChangeEvent e) {
549     SingleSelectionModel model = (SingleSelectionModel) e.getSource();
550     if(model.getSelectedIndex() == 0) {
551         currentControls = buttons;
552     } else if(model.getSelectedIndex() == 1) {
553         currentControls = radiobuttons;
554     } else if(model.getSelectedIndex() == 2) {
555         currentControls = checkboxes;
556     } else {
557         currentControls = togglebuttons;
558     }
559     }
560 
561     public Vector getCurrentControls() {
562     return currentControls;
563     }
564 }
565