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