ToggleButtonDemo.java revision 13978:1993af50385d
1/*
2 * Copyright (c) 2007, 2016, Oracle and/or its affiliates. All rights reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation.
8 *
9 * This code is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12 * version 2 for more details (a copy is included in the LICENSE file that
13 * accompanied this code).
14 *
15 * You should have received a copy of the GNU General Public License version
16 * 2 along with this work; if not, write to the Free Software Foundation,
17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18 *
19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20 * or visit www.oracle.com if you need additional information or have any
21 * questions.
22 */
23package com.sun.swingset3.demos.togglebutton;
24
25import java.awt.*;
26import java.awt.event.ItemEvent;
27import java.awt.event.ItemListener;
28import java.util.*;
29import java.util.List;
30import javax.swing.*;
31import javax.swing.border.*;
32import javax.swing.event.ChangeEvent;
33import javax.swing.event.ChangeListener;
34
35import com.sun.swingset3.DemoProperties;
36import com.sun.swingset3.demos.ResourceManager;
37
38/**
39 * JButton, JRadioButton, JToggleButton, JCheckBox Demos
40 *
41 * @version 1.15 11/17/05
42 * @author Jeff Dinkins
43 */
44@DemoProperties(
45        value = "ToggleButtons Demo",
46        category = "Controls",
47        description = "Demonstrates JCheckBox & JRadioButton",
48        sourceFiles = {
49            "com/sun/swingset3/demos/togglebutton/ToggleButtonDemo.java",
50            "com/sun/swingset3/demos/togglebutton/DirectionPanel.java",
51            "com/sun/swingset3/demos/togglebutton/LayoutControlPanel.java",
52            "com/sun/swingset3/demos/ResourceManager.java",
53            "com/sun/swingset3/demos/togglebutton/resources/ToggleButtonDemo.properties",
54            "com/sun/swingset3/demos/togglebutton/resources/images/b1.gif",
55            "com/sun/swingset3/demos/togglebutton/resources/images/b1d.gif",
56            "com/sun/swingset3/demos/togglebutton/resources/images/b1p.gif",
57            "com/sun/swingset3/demos/togglebutton/resources/images/b1r.gif",
58            "com/sun/swingset3/demos/togglebutton/resources/images/b2.gif",
59            "com/sun/swingset3/demos/togglebutton/resources/images/b2d.gif",
60            "com/sun/swingset3/demos/togglebutton/resources/images/b2p.gif",
61            "com/sun/swingset3/demos/togglebutton/resources/images/b2r.gif",
62            "com/sun/swingset3/demos/togglebutton/resources/images/b3.gif",
63            "com/sun/swingset3/demos/togglebutton/resources/images/b3d.gif",
64            "com/sun/swingset3/demos/togglebutton/resources/images/b3p.gif",
65            "com/sun/swingset3/demos/togglebutton/resources/images/b3r.gif",
66            "com/sun/swingset3/demos/togglebutton/resources/images/bl.gif",
67            "com/sun/swingset3/demos/togglebutton/resources/images/bldn.gif",
68            "com/sun/swingset3/demos/togglebutton/resources/images/bm.gif",
69            "com/sun/swingset3/demos/togglebutton/resources/images/bmdn.gif",
70            "com/sun/swingset3/demos/togglebutton/resources/images/br.gif",
71            "com/sun/swingset3/demos/togglebutton/resources/images/brdn.gif",
72            "com/sun/swingset3/demos/togglebutton/resources/images/c.gif",
73            "com/sun/swingset3/demos/togglebutton/resources/images/cb.gif",
74            "com/sun/swingset3/demos/togglebutton/resources/images/cbr.gif",
75            "com/sun/swingset3/demos/togglebutton/resources/images/cbrs.gif",
76            "com/sun/swingset3/demos/togglebutton/resources/images/cbs.gif",
77            "com/sun/swingset3/demos/togglebutton/resources/images/cdn.gif",
78            "com/sun/swingset3/demos/togglebutton/resources/images/ml.gif",
79            "com/sun/swingset3/demos/togglebutton/resources/images/mldn.gif",
80            "com/sun/swingset3/demos/togglebutton/resources/images/mr.gif",
81            "com/sun/swingset3/demos/togglebutton/resources/images/mrdn.gif",
82            "com/sun/swingset3/demos/togglebutton/resources/images/rb.gif",
83            "com/sun/swingset3/demos/togglebutton/resources/images/rbp.gif",
84            "com/sun/swingset3/demos/togglebutton/resources/images/rbr.gif",
85            "com/sun/swingset3/demos/togglebutton/resources/images/rbrs.gif",
86            "com/sun/swingset3/demos/togglebutton/resources/images/rbs.gif",
87            "com/sun/swingset3/demos/togglebutton/resources/images/tl.gif",
88            "com/sun/swingset3/demos/togglebutton/resources/images/tldn.gif",
89            "com/sun/swingset3/demos/togglebutton/resources/images/tm.gif",
90            "com/sun/swingset3/demos/togglebutton/resources/images/tmdn.gif",
91            "com/sun/swingset3/demos/togglebutton/resources/images/ToggleButtonDemo.gif",
92            "com/sun/swingset3/demos/togglebutton/resources/images/tr.gif",
93            "com/sun/swingset3/demos/togglebutton/resources/images/trdn.gif"
94        }
95)
96public class ToggleButtonDemo extends JPanel implements ChangeListener {
97
98    private static final Dimension HGAP10 = new Dimension(10, 1);
99    private static final Dimension HGAP20 = new Dimension(20, 1);
100    private static final Dimension VGAP20 = new Dimension(1, 20);
101    private static final Dimension VGAP30 = new Dimension(1, 30);
102
103    static final ResourceManager resourceManager = new ResourceManager(ToggleButtonDemo.class);
104    public static final String RADIO3 = resourceManager.getString("ToggleButtonDemo.radio3");
105    public static final String RADIO2 = resourceManager.getString("ToggleButtonDemo.radio2");
106    public static final String RADIO1 = resourceManager.getString("ToggleButtonDemo.radio1");
107    public static final String IMAGE_RADIO_BUTTONS = resourceManager.getString("ToggleButtonDemo.imageradiobuttons");
108    public static final String TEXT_RADIO_BUTTONS = resourceManager.getString("ToggleButtonDemo.textradiobuttons");
109    public static final String CHECK3 = resourceManager.getString("ToggleButtonDemo.check3");
110    public static final String CHECK2 = resourceManager.getString("ToggleButtonDemo.check2");
111    public static final String CHECK1 = resourceManager.getString("ToggleButtonDemo.check1");
112    public static final String CHECK_BOXES = resourceManager.getString("ToggleButtonDemo.checkboxes");
113    public static final String IMAGE_CHECKBOXES = resourceManager.getString("ToggleButtonDemo.imagecheckboxes");
114    public static final String TEXT_CHECKBOXES = resourceManager.getString("ToggleButtonDemo.textcheckboxes");
115    public static final String CONTENT_FILLED = resourceManager.getString("ToggleButtonDemo.contentfilled");
116    public static final String ENABLED = resourceManager.getString("ToggleButtonDemo.enabled");
117    public static final String PAINT_FOCUS = resourceManager.getString("ToggleButtonDemo.paintfocus");
118    public static final String PAINT_BORDER = resourceManager.getString("ToggleButtonDemo.paintborder");
119    public static final String DISPLAY_OPTIONS = resourceManager.getString("ToggleButtonDemo.controlpanel_label");
120    public static final String DEFAULT = resourceManager.getString("ToggleButtonDemo.default");
121    public static final String PAD_AMOUNT = resourceManager.getString("ToggleButtonDemo.padamount_label");
122
123    private final JTabbedPane tab;
124
125    private final JPanel checkboxPanel = new JPanel();
126    private final JPanel radioButtonPanel = new JPanel();
127
128    private final List<JButton> buttons = new ArrayList<>();
129    private final List<JCheckBox> checkboxes = new ArrayList<>();
130    private final List<JRadioButton> radiobuttons = new ArrayList<>();
131    private final List<JToggleButton> togglebuttons = new ArrayList<>();
132
133    private List<? extends JComponent> currentControls = buttons;
134
135    private final EmptyBorder border5 = new EmptyBorder(5, 5, 5, 5);
136
137    private ItemListener buttonDisplayListener = null;
138    private ItemListener buttonPadListener = null;
139
140    private final Insets insets0 = new Insets(0, 0, 0, 0);
141    private final Insets insets10 = new Insets(10, 10, 10, 10);
142
143    private final Border loweredBorder = new CompoundBorder(
144            new SoftBevelBorder(SoftBevelBorder.LOWERED), new EmptyBorder(5, 5, 5, 5));
145
146    /**
147     * main method allows us to run as a standalone demo.
148     *
149     * @param args
150     */
151    public static void main(String[] args) {
152        JFrame frame = new JFrame(ToggleButtonDemo.class.getAnnotation(DemoProperties.class).value());
153
154        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
155        frame.getContentPane().add(new ToggleButtonDemo());
156        frame.setPreferredSize(new Dimension(800, 600));
157        frame.pack();
158        frame.setLocationRelativeTo(null);
159        frame.setVisible(true);
160    }
161
162    /**
163     * ButtonDemo Constructor
164     */
165    public ToggleButtonDemo() {
166        setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
167
168        tab = new JTabbedPane();
169        tab.getModel().addChangeListener(this);
170
171        add(tab);
172
173        //addButtons();
174        addRadioButtons();
175        addCheckBoxes();
176        //addToggleButtons();
177        currentControls = checkboxes;
178    }
179
180    private void addRadioButtons() {
181        ButtonGroup group = new ButtonGroup();
182
183        tab.addTab(resourceManager.getString("ToggleButtonDemo.radiobuttons"), radioButtonPanel);
184        radioButtonPanel.setLayout(new BoxLayout(radioButtonPanel, BoxLayout.X_AXIS));
185        radioButtonPanel.setBorder(border5);
186
187        JPanel p1 = createVerticalPanel(true);
188        p1.setAlignmentY(TOP_ALIGNMENT);
189        radioButtonPanel.add(p1);
190
191        // Text Radio Buttons
192        JPanel p2 = createHorizontalPanel(false);
193        p1.add(p2);
194        p2.setBorder(new CompoundBorder(
195                new TitledBorder(
196                        null, TEXT_RADIO_BUTTONS,
197                        TitledBorder.LEFT, TitledBorder.TOP), border5)
198        );
199
200        JRadioButton radio = (JRadioButton) p2.add(new JRadioButton(RADIO1));
201        group.add(radio);
202        radiobuttons.add(radio);
203        p2.add(Box.createRigidArea(HGAP10));
204
205        radio = (JRadioButton) p2.add(new JRadioButton(RADIO2));
206        group.add(radio);
207        radiobuttons.add(radio);
208        p2.add(Box.createRigidArea(HGAP10));
209
210        radio = (JRadioButton) p2.add(new JRadioButton(RADIO3));
211        group.add(radio);
212        radiobuttons.add(radio);
213
214        // Image Radio Buttons
215        group = new ButtonGroup();
216        p1.add(Box.createRigidArea(VGAP30));
217        JPanel p3 = createHorizontalPanel(false);
218        p1.add(p3);
219        p3.setLayout(new BoxLayout(p3, BoxLayout.X_AXIS));
220        p3.setBorder(new TitledBorder(null, IMAGE_RADIO_BUTTONS,
221                TitledBorder.LEFT, TitledBorder.TOP));
222
223        // image radio button 1
224        String description = resourceManager.getString("ToggleButtonDemo.customradio");
225        String text = RADIO1;
226        radio = new JRadioButton(text, resourceManager.createImageIcon("rb.gif", description));
227        radio.setPressedIcon(resourceManager.createImageIcon("rbp.gif", description));
228        radio.setRolloverIcon(resourceManager.createImageIcon("rbr.gif", description));
229        radio.setRolloverSelectedIcon(resourceManager.createImageIcon("rbrs.gif", description));
230        radio.setSelectedIcon(resourceManager.createImageIcon("rbs.gif", description));
231        radio.setMargin(new Insets(0, 0, 0, 0));
232        group.add(radio);
233        p3.add(radio);
234        radiobuttons.add(radio);
235        p3.add(Box.createRigidArea(HGAP20));
236
237        // image radio button 2
238        text = RADIO2;
239        radio = new JRadioButton(text, resourceManager.createImageIcon("rb.gif", description));
240        radio.setPressedIcon(resourceManager.createImageIcon("rbp.gif", description));
241        radio.setRolloverIcon(resourceManager.createImageIcon("rbr.gif", description));
242        radio.setRolloverSelectedIcon(resourceManager.createImageIcon("rbrs.gif", description));
243        radio.setSelectedIcon(resourceManager.createImageIcon("rbs.gif", description));
244        radio.setMargin(new Insets(0, 0, 0, 0));
245        group.add(radio);
246        p3.add(radio);
247        radiobuttons.add(radio);
248        p3.add(Box.createRigidArea(HGAP20));
249
250        // image radio button 3
251        text = RADIO3;
252        radio = new JRadioButton(text, resourceManager.createImageIcon("rb.gif", description));
253        radio.setPressedIcon(resourceManager.createImageIcon("rbp.gif", description));
254        radio.setRolloverIcon(resourceManager.createImageIcon("rbr.gif", description));
255        radio.setRolloverSelectedIcon(resourceManager.createImageIcon("rbrs.gif", description));
256        radio.setSelectedIcon(resourceManager.createImageIcon("rbs.gif", description));
257        radio.setMargin(new Insets(0, 0, 0, 0));
258        group.add(radio);
259        radiobuttons.add(radio);
260        p3.add(radio);
261
262        // verticaly glue fills out the rest of the box
263        p1.add(Box.createVerticalGlue());
264
265        radioButtonPanel.add(Box.createHorizontalGlue());
266        currentControls = radiobuttons;
267        radioButtonPanel.add(createControls());
268    }
269
270    private void addCheckBoxes() {
271        tab.addTab(CHECK_BOXES, checkboxPanel);
272        checkboxPanel.setLayout(new BoxLayout(checkboxPanel, BoxLayout.X_AXIS));
273        checkboxPanel.setBorder(border5);
274
275        JPanel p1 = createVerticalPanel(true);
276        p1.setAlignmentY(TOP_ALIGNMENT);
277        checkboxPanel.add(p1);
278
279        // Text Radio Buttons
280        JPanel p2 = createHorizontalPanel(false);
281        p1.add(p2);
282        p2.setBorder(new CompoundBorder(
283                new TitledBorder(
284                        null, TEXT_CHECKBOXES,
285                        TitledBorder.LEFT, TitledBorder.TOP), border5)
286        );
287
288        JCheckBox checkBox1 = new JCheckBox(CHECK1);
289        checkboxes.add(checkBox1);
290        p2.add(checkBox1);
291        p2.add(Box.createRigidArea(HGAP10));
292
293        JCheckBox checkBox2 = new JCheckBox(CHECK2);
294        checkboxes.add(checkBox2);
295        p2.add(checkBox2);
296        p2.add(Box.createRigidArea(HGAP10));
297
298        JCheckBox checkBox3 = new JCheckBox(CHECK3);
299        checkboxes.add(checkBox3);
300        p2.add(checkBox3);
301
302        // Image Radio Buttons
303        p1.add(Box.createRigidArea(VGAP30));
304        JPanel p3 = createHorizontalPanel(false);
305        p1.add(p3);
306        p3.setLayout(new BoxLayout(p3, BoxLayout.X_AXIS));
307        p3.setBorder(new TitledBorder(null, IMAGE_CHECKBOXES,
308                TitledBorder.LEFT, TitledBorder.TOP));
309
310        // image checkbox 1
311        String description = resourceManager.getString("ToggleButtonDemo.customcheck");
312        String text = CHECK1;
313        JCheckBox check = new JCheckBox(text,
314                resourceManager.createImageIcon("cb.gif", description));
315        check.setRolloverIcon(resourceManager.createImageIcon("cbr.gif", description));
316        check.setRolloverSelectedIcon(resourceManager.createImageIcon("cbrs.gif", description));
317        check.setSelectedIcon(resourceManager.createImageIcon("cbs.gif", description));
318        check.setMargin(new Insets(0, 0, 0, 0));
319        p3.add(check);
320        checkboxes.add(check);
321        p3.add(Box.createRigidArea(HGAP20));
322
323        // image checkbox 2
324        text = CHECK2;
325        check = new JCheckBox(text, resourceManager.createImageIcon("cb.gif", description));
326        check.setRolloverIcon(resourceManager.createImageIcon("cbr.gif", description));
327        check.setRolloverSelectedIcon(resourceManager.createImageIcon("cbrs.gif", description));
328        check.setSelectedIcon(resourceManager.createImageIcon("cbs.gif", description));
329        check.setMargin(new Insets(0, 0, 0, 0));
330        p3.add(check);
331        checkboxes.add(check);
332        p3.add(Box.createRigidArea(HGAP20));
333
334        // image checkbox 3
335        text = CHECK3;
336        check = new JCheckBox(text, resourceManager.createImageIcon("cb.gif", description));
337        check.setRolloverIcon(resourceManager.createImageIcon("cbr.gif", description));
338        check.setRolloverSelectedIcon(resourceManager.createImageIcon("cbrs.gif", description));
339        check.setSelectedIcon(resourceManager.createImageIcon("cbs.gif", description));
340        check.setMargin(new Insets(0, 0, 0, 0));
341        p3.add(check);
342        checkboxes.add(check);
343
344        // verticaly glue fills out the rest of the box
345        p1.add(Box.createVerticalGlue());
346
347        checkboxPanel.add(Box.createHorizontalGlue());
348        currentControls = checkboxes;
349        checkboxPanel.add(createControls());
350    }
351
352    private JPanel createControls() {
353        JPanel controls = new JPanel() {
354            @Override
355            public Dimension getMaximumSize() {
356                return new Dimension(300, super.getMaximumSize().height);
357            }
358        };
359        controls.setLayout(new BoxLayout(controls, BoxLayout.Y_AXIS));
360        controls.setAlignmentY(TOP_ALIGNMENT);
361        controls.setAlignmentX(LEFT_ALIGNMENT);
362
363        JPanel buttonControls = createHorizontalPanel(true);
364        buttonControls.setAlignmentY(TOP_ALIGNMENT);
365        buttonControls.setAlignmentX(LEFT_ALIGNMENT);
366
367        JPanel leftColumn = createVerticalPanel(false);
368        leftColumn.setAlignmentX(LEFT_ALIGNMENT);
369        leftColumn.setAlignmentY(TOP_ALIGNMENT);
370
371        JPanel rightColumn = new LayoutControlPanel(this);
372
373        buttonControls.add(leftColumn);
374        buttonControls.add(Box.createRigidArea(HGAP20));
375        buttonControls.add(rightColumn);
376        buttonControls.add(Box.createRigidArea(HGAP20));
377
378        controls.add(buttonControls);
379
380        createListeners();
381
382        // Display Options
383        JLabel l = new JLabel(DISPLAY_OPTIONS);
384        leftColumn.add(l);
385
386        JCheckBox bordered = new JCheckBox(PAINT_BORDER);
387        bordered.setActionCommand("PaintBorder");
388        bordered.setToolTipText(resourceManager.getString("ToggleButtonDemo.paintborder_tooltip"));
389        bordered.setMnemonic(resourceManager.getMnemonic("ToggleButtonDemo.paintborder_mnemonic"));
390        if (currentControls == buttons) {
391            bordered.setSelected(true);
392        }
393        bordered.addItemListener(buttonDisplayListener);
394        leftColumn.add(bordered);
395
396        JCheckBox focused = new JCheckBox(PAINT_FOCUS);
397        focused.setActionCommand("PaintFocus");
398        focused.setToolTipText(resourceManager.getString("ToggleButtonDemo.paintfocus_tooltip"));
399        focused.setMnemonic(resourceManager.getMnemonic("ToggleButtonDemo.paintfocus_mnemonic"));
400        focused.setSelected(true);
401        focused.addItemListener(buttonDisplayListener);
402        leftColumn.add(focused);
403
404        JCheckBox enabled = new JCheckBox(ENABLED);
405        enabled.setActionCommand("Enabled");
406        enabled.setToolTipText(resourceManager.getString("ToggleButtonDemo.enabled_tooltip"));
407        enabled.setSelected(true);
408        enabled.addItemListener(buttonDisplayListener);
409        enabled.setMnemonic(resourceManager.getMnemonic("ToggleButtonDemo.enabled_mnemonic"));
410        leftColumn.add(enabled);
411
412        JCheckBox filled = new JCheckBox(CONTENT_FILLED);
413        filled.setActionCommand("ContentFilled");
414        filled.setToolTipText(resourceManager.getString("ToggleButtonDemo.contentfilled_tooltip"));
415        filled.setSelected(true);
416        filled.addItemListener(buttonDisplayListener);
417        filled.setMnemonic(resourceManager.getMnemonic("ToggleButtonDemo.contentfilled_mnemonic"));
418        leftColumn.add(filled);
419
420        leftColumn.add(Box.createRigidArea(VGAP20));
421
422        l = new JLabel(PAD_AMOUNT);
423        leftColumn.add(l);
424        ButtonGroup group = new ButtonGroup();
425        JRadioButton defaultPad = new JRadioButton(DEFAULT);
426        defaultPad.setToolTipText(resourceManager.getString("ToggleButtonDemo.default_tooltip"));
427        defaultPad.setMnemonic(resourceManager.getMnemonic("ToggleButtonDemo.default_mnemonic"));
428        defaultPad.addItemListener(buttonPadListener);
429        group.add(defaultPad);
430        defaultPad.setSelected(true);
431        leftColumn.add(defaultPad);
432
433        JRadioButton zeroPad = new JRadioButton(resourceManager.getString("ToggleButtonDemo.zero"));
434        zeroPad.setActionCommand("ZeroPad");
435        zeroPad.setToolTipText(resourceManager.getString("ToggleButtonDemo.zero_tooltip"));
436        zeroPad.addItemListener(buttonPadListener);
437        zeroPad.setMnemonic(resourceManager.getMnemonic("ToggleButtonDemo.zero_mnemonic"));
438        group.add(zeroPad);
439        leftColumn.add(zeroPad);
440
441        JRadioButton tenPad = new JRadioButton(resourceManager.getString("ToggleButtonDemo.ten"));
442        tenPad.setActionCommand("TenPad");
443        tenPad.setMnemonic(resourceManager.getMnemonic("ToggleButtonDemo.ten_mnemonic"));
444        tenPad.setToolTipText(resourceManager.getString("ToggleButtonDemo.ten_tooltip"));
445        tenPad.addItemListener(buttonPadListener);
446        group.add(tenPad);
447        leftColumn.add(tenPad);
448
449        leftColumn.add(Box.createRigidArea(VGAP20));
450        return controls;
451    }
452
453    private void createListeners() {
454        buttonDisplayListener = (ItemEvent e) -> {
455            JCheckBox cb = (JCheckBox) e.getSource();
456            String command = cb.getActionCommand();
457            switch (command) {
458                case "Enabled":
459                    for (JComponent control : currentControls) {
460                        control.setEnabled(cb.isSelected());
461                        control.invalidate();
462                    }
463                    break;
464                case "PaintBorder":
465                    if (currentControls.get(0) instanceof AbstractButton) {
466                        for (JComponent control : currentControls) {
467                            AbstractButton b = (AbstractButton) control;
468                            b.setBorderPainted(cb.isSelected());
469                            b.invalidate();
470                        }
471                    }
472                    break;
473                case "PaintFocus":
474                    if (currentControls.get(0) instanceof AbstractButton) {
475                        for (JComponent control : currentControls) {
476                            AbstractButton b = (AbstractButton) control;
477                            b.setFocusPainted(cb.isSelected());
478                            b.invalidate();
479                        }
480                    }
481                    break;
482                case "ContentFilled":
483                    if (currentControls.get(0) instanceof AbstractButton) {
484                        for (JComponent control : currentControls) {
485                            AbstractButton b = (AbstractButton) control;
486                            b.setContentAreaFilled(cb.isSelected());
487                            b.invalidate();
488                        }
489                    }
490                    break;
491            }
492            invalidate();
493            validate();
494            repaint();
495        };
496
497        buttonPadListener = (ItemEvent e) -> {
498            // *** pad = 0
499            int pad = -1;
500            JRadioButton rb = (JRadioButton) e.getSource();
501            String command = rb.getActionCommand();
502            if ("ZeroPad".equals(command) && rb.isSelected()) {
503                pad = 0;
504            } else if ("TenPad".equals(command) && rb.isSelected()) {
505                pad = 10;
506            }
507
508            for (JComponent control : currentControls) {
509                AbstractButton b = (AbstractButton) control;
510                if (pad == -1) {
511                    b.setMargin(null);
512                } else if (pad == 0) {
513                    b.setMargin(insets0);
514                } else {
515                    b.setMargin(insets10);
516                }
517            }
518            invalidate();
519            validate();
520            repaint();
521        };
522    }
523
524    @Override
525    public void stateChanged(ChangeEvent e) {
526        SingleSelectionModel model = (SingleSelectionModel) e.getSource();
527        if (model.getSelectedIndex() == 0) {
528            currentControls = buttons;
529        } else if (model.getSelectedIndex() == 1) {
530            currentControls = radiobuttons;
531        } else if (model.getSelectedIndex() == 2) {
532            currentControls = checkboxes;
533        } else {
534            currentControls = togglebuttons;
535        }
536    }
537
538    public List<? extends JComponent> getCurrentControls() {
539        return currentControls;
540    }
541
542    private JPanel createHorizontalPanel(boolean threeD) {
543        JPanel p = new JPanel();
544        p.setLayout(new BoxLayout(p, BoxLayout.X_AXIS));
545        p.setAlignmentY(TOP_ALIGNMENT);
546        p.setAlignmentX(LEFT_ALIGNMENT);
547        if (threeD) {
548            p.setBorder(loweredBorder);
549        }
550        return p;
551    }
552
553    private JPanel createVerticalPanel(boolean threeD) {
554        JPanel p = new JPanel();
555        p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
556        p.setAlignmentY(TOP_ALIGNMENT);
557        p.setAlignmentX(LEFT_ALIGNMENT);
558        if (threeD) {
559            p.setBorder(loweredBorder);
560        }
561        return p;
562    }
563}
564