Path: blob/master/src/demo/share/jfc/SwingSet2/ButtonDemo.java
41152 views
/*1*2* Copyright (c) 2007, Oracle and/or its affiliates. All rights reserved.3*4* Redistribution and use in source and binary forms, with or without5* modification, are permitted provided that the following conditions6* are met:7*8* - Redistributions of source code must retain the above copyright9* notice, this list of conditions and the following disclaimer.10*11* - Redistributions in binary form must reproduce the above copyright12* notice, this list of conditions and the following disclaimer in the13* documentation and/or other materials provided with the distribution.14*15* - Neither the name of Oracle nor the names of its16* contributors may be used to endorse or promote products derived17* from this software without specific prior written permission.18*19* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS20* IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,21* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR22* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR23* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,24* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,25* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR26* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF27* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING28* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS29* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.30*/313233import javax.swing.*;34import javax.swing.event.*;35import javax.swing.text.*;36import javax.swing.border.*;37import javax.swing.colorchooser.*;38import javax.swing.filechooser.*;39import javax.accessibility.*;4041import java.awt.*;42import java.awt.event.*;43import java.beans.*;44import java.util.*;45import java.io.*;46import java.applet.*;47import java.net.*;4849/**50* JButton, JRadioButton, JToggleButton, JCheckBox Demos51*52* @author Jeff Dinkins53*/54public class ButtonDemo extends DemoModule implements ChangeListener {5556JTabbedPane tab;5758JPanel buttonPanel = new JPanel();59JPanel checkboxPanel = new JPanel();60JPanel radioButtonPanel = new JPanel();61JPanel toggleButtonPanel = new JPanel();6263Vector<Component> buttons = new Vector<>();64Vector<Component> checkboxes = new Vector<>();65Vector<Component> radiobuttons = new Vector<>();66Vector<Component> togglebuttons = new Vector<>();6768Vector<Component> currentControls = buttons;6970JButton button;71JCheckBox check;72JRadioButton radio;73JToggleButton toggle;7475EmptyBorder border5 = new EmptyBorder(5,5,5,5);76EmptyBorder border10 = new EmptyBorder(10,10,10,10);7778ItemListener buttonDisplayListener = null;79ItemListener buttonPadListener = null;8081Insets insets0 = new Insets(0,0,0,0);82Insets insets10 = new Insets(10,10,10,10);8384/**85* main method allows us to run as a standalone demo.86*/87public static void main(String[] args) {88ButtonDemo demo = new ButtonDemo(null);89demo.mainImpl();90}9192/**93* ButtonDemo Constructor94*/95public ButtonDemo(SwingSet2 swingset) {96// Set the title for this demo, and an icon used to represent this97// demo inside the SwingSet2 app.98super(swingset, "ButtonDemo", "toolbar/JButton.gif");99100tab = new JTabbedPane();101tab.getModel().addChangeListener(this);102103JPanel demo = getDemoPanel();104demo.setLayout(new BoxLayout(demo, BoxLayout.Y_AXIS));105demo.add(tab);106107addButtons();108addRadioButtons();109addCheckBoxes();110// addToggleButtons();111currentControls = buttons;112}113114public void addButtons() {115tab.addTab(getString("ButtonDemo.buttons"), buttonPanel);116buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS));117buttonPanel.setBorder(border5);118119JPanel p1 = createVerticalPanel(true);120p1.setAlignmentY(TOP_ALIGNMENT);121buttonPanel.add(p1);122123// Text Buttons124JPanel p2 = createHorizontalPanel(false);125p1.add(p2);126p2.setBorder(new CompoundBorder(new TitledBorder(null, getString("ButtonDemo.textbuttons"),127TitledBorder.LEFT, TitledBorder.TOP), border5));128129buttons.add(p2.add(new JButton(getString("ButtonDemo.button1"))));130p2.add(Box.createRigidArea(HGAP10));131132buttons.add(p2.add(new JButton(getString("ButtonDemo.button2"))));133p2.add(Box.createRigidArea(HGAP10));134135buttons.add(p2.add(new JButton(getString("ButtonDemo.button3"))));136137138// Image Buttons139p1.add(Box.createRigidArea(VGAP30));140JPanel p3 = createHorizontalPanel(false);141p1.add(p3);142p3.setLayout(new BoxLayout(p3, BoxLayout.X_AXIS));143p3.setBorder(new TitledBorder(null, getString("ButtonDemo.imagebuttons"),144TitledBorder.LEFT, TitledBorder.TOP));145146// home image button147String description = getString("ButtonDemo.phone");148button = new JButton(createImageIcon("buttons/b1.gif", description));149button.setPressedIcon(createImageIcon("buttons/b1p.gif", description));150button.setRolloverIcon(createImageIcon("buttons/b1r.gif", description));151button.setDisabledIcon(createImageIcon("buttons/b1d.gif", description));152button.setMargin(new Insets(0,0,0,0));153p3.add(button);154buttons.add(button);155p3.add(Box.createRigidArea(HGAP10));156157// write image button158description = getString("ButtonDemo.write");159button = new JButton(createImageIcon("buttons/b2.gif", description));160button.setPressedIcon(createImageIcon("buttons/b2p.gif", description));161button.setRolloverIcon(createImageIcon("buttons/b2r.gif", description));162button.setDisabledIcon(createImageIcon("buttons/b2d.gif", description));163button.setMargin(new Insets(0,0,0,0));164p3.add(button);165buttons.add(button);166p3.add(Box.createRigidArea(HGAP10));167168// write image button169description = getString("ButtonDemo.peace");170button = new JButton(createImageIcon("buttons/b3.gif", description));171button.setPressedIcon(createImageIcon("buttons/b3p.gif", description));172button.setRolloverIcon(createImageIcon("buttons/b3r.gif", description));173button.setDisabledIcon(createImageIcon("buttons/b3d.gif", description));174button.setMargin(new Insets(0,0,0,0));175p3.add(button);176buttons.add(button);177178p1.add(Box.createVerticalGlue());179180buttonPanel.add(Box.createHorizontalGlue());181currentControls = buttons;182buttonPanel.add(createControls());183}184185public void addRadioButtons() {186ButtonGroup group = new ButtonGroup();187188tab.addTab(getString("ButtonDemo.radiobuttons"), radioButtonPanel);189radioButtonPanel.setLayout(new BoxLayout(radioButtonPanel, BoxLayout.X_AXIS));190radioButtonPanel.setBorder(border5);191192JPanel p1 = createVerticalPanel(true);193p1.setAlignmentY(TOP_ALIGNMENT);194radioButtonPanel.add(p1);195196// Text Radio Buttons197JPanel p2 = createHorizontalPanel(false);198p1.add(p2);199p2.setBorder(new CompoundBorder(200new TitledBorder(201null, getString("ButtonDemo.textradiobuttons"),202TitledBorder.LEFT, TitledBorder.TOP), border5)203);204205radio = (JRadioButton)p2.add(206new JRadioButton(getString("ButtonDemo.radio1")));207group.add(radio);208radiobuttons.add(radio);209p2.add(Box.createRigidArea(HGAP10));210211radio = (JRadioButton)p2.add(212new JRadioButton(getString("ButtonDemo.radio2")));213group.add(radio);214radiobuttons.add(radio);215p2.add(Box.createRigidArea(HGAP10));216217radio = (JRadioButton)p2.add(218new JRadioButton(getString("ButtonDemo.radio3")));219group.add(radio);220radiobuttons.add(radio);221222// Image Radio Buttons223group = new ButtonGroup();224p1.add(Box.createRigidArea(VGAP30));225JPanel p3 = createHorizontalPanel(false);226p1.add(p3);227p3.setLayout(new BoxLayout(p3, BoxLayout.X_AXIS));228p3.setBorder(new TitledBorder(null, getString("ButtonDemo.imageradiobuttons"),229TitledBorder.LEFT, TitledBorder.TOP));230231// image radio button 1232String description = getString("ButtonDemo.customradio");233String text = getString("ButtonDemo.radio1");234radio = new JRadioButton(text, createImageIcon("buttons/rb.gif", description));235radio.setPressedIcon(createImageIcon("buttons/rbp.gif", description));236radio.setRolloverIcon(createImageIcon("buttons/rbr.gif", description));237radio.setRolloverSelectedIcon(createImageIcon("buttons/rbrs.gif", description));238radio.setSelectedIcon(createImageIcon("buttons/rbs.gif", description));239radio.setMargin(new Insets(0,0,0,0));240group.add(radio);241p3.add(radio);242radiobuttons.add(radio);243p3.add(Box.createRigidArea(HGAP20));244245// image radio button 2246text = getString("ButtonDemo.radio2");247radio = new JRadioButton(text, createImageIcon("buttons/rb.gif", description));248radio.setPressedIcon(createImageIcon("buttons/rbp.gif", description));249radio.setRolloverIcon(createImageIcon("buttons/rbr.gif", description));250radio.setRolloverSelectedIcon(createImageIcon("buttons/rbrs.gif", description));251radio.setSelectedIcon(createImageIcon("buttons/rbs.gif", description));252radio.setMargin(new Insets(0,0,0,0));253group.add(radio);254p3.add(radio);255radiobuttons.add(radio);256p3.add(Box.createRigidArea(HGAP20));257258// image radio button 3259text = getString("ButtonDemo.radio3");260radio = new JRadioButton(text, createImageIcon("buttons/rb.gif", description));261radio.setPressedIcon(createImageIcon("buttons/rbp.gif", description));262radio.setRolloverIcon(createImageIcon("buttons/rbr.gif", description));263radio.setRolloverSelectedIcon(createImageIcon("buttons/rbrs.gif", description));264radio.setSelectedIcon(createImageIcon("buttons/rbs.gif", description));265radio.setMargin(new Insets(0,0,0,0));266group.add(radio);267radiobuttons.add(radio);268p3.add(radio);269270// verticaly glue fills out the rest of the box271p1.add(Box.createVerticalGlue());272273radioButtonPanel.add(Box.createHorizontalGlue());274currentControls = radiobuttons;275radioButtonPanel.add(createControls());276}277278279public void addCheckBoxes() {280tab.addTab(getString("ButtonDemo.checkboxes"), checkboxPanel);281checkboxPanel.setLayout(new BoxLayout(checkboxPanel, BoxLayout.X_AXIS));282checkboxPanel.setBorder(border5);283284JPanel p1 = createVerticalPanel(true);285p1.setAlignmentY(TOP_ALIGNMENT);286checkboxPanel.add(p1);287288// Text Radio Buttons289JPanel p2 = createHorizontalPanel(false);290p1.add(p2);291p2.setBorder(new CompoundBorder(292new TitledBorder(293null, getString("ButtonDemo.textcheckboxes"),294TitledBorder.LEFT, TitledBorder.TOP), border5)295);296297checkboxes.add(p2.add(new JCheckBox(getString("ButtonDemo.check1"))));298p2.add(Box.createRigidArea(HGAP10));299300checkboxes.add(p2.add(new JCheckBox(getString("ButtonDemo.check2"))));301p2.add(Box.createRigidArea(HGAP10));302303checkboxes.add(p2.add(new JCheckBox(getString("ButtonDemo.check3"))));304305// Image Radio Buttons306p1.add(Box.createRigidArea(VGAP30));307JPanel p3 = createHorizontalPanel(false);308p1.add(p3);309p3.setLayout(new BoxLayout(p3, BoxLayout.X_AXIS));310p3.setBorder(new TitledBorder(null, getString("ButtonDemo.imagecheckboxes"),311TitledBorder.LEFT, TitledBorder.TOP));312313// image checkbox 1314String description = getString("ButtonDemo.customcheck");315String text = getString("ButtonDemo.check1");316check = new JCheckBox(text, createImageIcon("buttons/cb.gif", description));317check.setRolloverIcon(createImageIcon("buttons/cbr.gif", description));318check.setRolloverSelectedIcon(createImageIcon("buttons/cbrs.gif", description));319check.setSelectedIcon(createImageIcon("buttons/cbs.gif", description));320check.setMargin(new Insets(0,0,0,0));321p3.add(check);322checkboxes.add(check);323p3.add(Box.createRigidArea(HGAP20));324325// image checkbox 2326text = getString("ButtonDemo.check2");327check = new JCheckBox(text, createImageIcon("buttons/cb.gif", description));328check.setRolloverIcon(createImageIcon("buttons/cbr.gif", description));329check.setRolloverSelectedIcon(createImageIcon("buttons/cbrs.gif", description));330check.setSelectedIcon(createImageIcon("buttons/cbs.gif", description));331check.setMargin(new Insets(0,0,0,0));332p3.add(check);333checkboxes.add(check);334p3.add(Box.createRigidArea(HGAP20));335336// image checkbox 3337text = getString("ButtonDemo.check3");338check = new JCheckBox(text, createImageIcon("buttons/cb.gif", description));339check.setRolloverIcon(createImageIcon("buttons/cbr.gif", description));340check.setRolloverSelectedIcon(createImageIcon("buttons/cbrs.gif", description));341check.setSelectedIcon(createImageIcon("buttons/cbs.gif", description));342check.setMargin(new Insets(0,0,0,0));343p3.add(check);344checkboxes.add(check);345346// verticaly glue fills out the rest of the box347p1.add(Box.createVerticalGlue());348349checkboxPanel.add(Box.createHorizontalGlue());350currentControls = checkboxes;351checkboxPanel.add(createControls());352}353354public void addToggleButtons() {355tab.addTab(getString("ButtonDemo.togglebuttons"), toggleButtonPanel);356}357358public JPanel createControls() {359JPanel controls = new JPanel() {360public Dimension getMaximumSize() {361return new Dimension(300, super.getMaximumSize().height);362}363};364controls.setLayout(new BoxLayout(controls, BoxLayout.Y_AXIS));365controls.setAlignmentY(TOP_ALIGNMENT);366controls.setAlignmentX(LEFT_ALIGNMENT);367368JPanel buttonControls = createHorizontalPanel(true);369buttonControls.setAlignmentY(TOP_ALIGNMENT);370buttonControls.setAlignmentX(LEFT_ALIGNMENT);371372JPanel leftColumn = createVerticalPanel(false);373leftColumn.setAlignmentX(LEFT_ALIGNMENT);374leftColumn.setAlignmentY(TOP_ALIGNMENT);375376JPanel rightColumn = new LayoutControlPanel(this);377378buttonControls.add(leftColumn);379buttonControls.add(Box.createRigidArea(HGAP20));380buttonControls.add(rightColumn);381buttonControls.add(Box.createRigidArea(HGAP20));382383controls.add(buttonControls);384385createListeners();386387// Display Options388JLabel l = new JLabel(getString("ButtonDemo.controlpanel_label"));389leftColumn.add(l);390391JCheckBox bordered = new JCheckBox(getString("ButtonDemo.paintborder"));392bordered.setActionCommand("PaintBorder");393bordered.setToolTipText(getString("ButtonDemo.paintborder_tooltip"));394bordered.setMnemonic(getMnemonic("ButtonDemo.paintborder_mnemonic"));395if (currentControls == buttons) {396bordered.setSelected(true);397}398bordered.addItemListener(buttonDisplayListener);399leftColumn.add(bordered);400401JCheckBox focused = new JCheckBox(getString("ButtonDemo.paintfocus"));402focused.setActionCommand("PaintFocus");403focused.setToolTipText(getString("ButtonDemo.paintfocus_tooltip"));404focused.setMnemonic(getMnemonic("ButtonDemo.paintfocus_mnemonic"));405focused.setSelected(true);406focused.addItemListener(buttonDisplayListener);407leftColumn.add(focused);408409JCheckBox enabled = new JCheckBox(getString("ButtonDemo.enabled"));410enabled.setActionCommand("Enabled");411enabled.setToolTipText(getString("ButtonDemo.enabled_tooltip"));412enabled.setSelected(true);413enabled.addItemListener(buttonDisplayListener);414enabled.setMnemonic(getMnemonic("ButtonDemo.enabled_mnemonic"));415leftColumn.add(enabled);416417JCheckBox filled = new JCheckBox(getString("ButtonDemo.contentfilled"));418filled.setActionCommand("ContentFilled");419filled.setToolTipText(getString("ButtonDemo.contentfilled_tooltip"));420filled.setSelected(true);421filled.addItemListener(buttonDisplayListener);422filled.setMnemonic(getMnemonic("ButtonDemo.contentfilled_mnemonic"));423leftColumn.add(filled);424425leftColumn.add(Box.createRigidArea(VGAP20));426427l = new JLabel(getString("ButtonDemo.padamount_label"));428leftColumn.add(l);429ButtonGroup group = new ButtonGroup();430JRadioButton defaultPad = new JRadioButton(getString("ButtonDemo.default"));431defaultPad.setToolTipText(getString("ButtonDemo.default_tooltip"));432defaultPad.setMnemonic(getMnemonic("ButtonDemo.default_mnemonic"));433defaultPad.addItemListener(buttonPadListener);434group.add(defaultPad);435defaultPad.setSelected(true);436leftColumn.add(defaultPad);437438JRadioButton zeroPad = new JRadioButton(getString("ButtonDemo.zero"));439zeroPad.setActionCommand("ZeroPad");440zeroPad.setToolTipText(getString("ButtonDemo.zero_tooltip"));441zeroPad.addItemListener(buttonPadListener);442zeroPad.setMnemonic(getMnemonic("ButtonDemo.zero_mnemonic"));443group.add(zeroPad);444leftColumn.add(zeroPad);445446JRadioButton tenPad = new JRadioButton(getString("ButtonDemo.ten"));447tenPad.setActionCommand("TenPad");448tenPad.setMnemonic(getMnemonic("ButtonDemo.ten_mnemonic"));449tenPad.setToolTipText(getString("ButtonDemo.ten_tooltip"));450tenPad.addItemListener(buttonPadListener);451group.add(tenPad);452leftColumn.add(tenPad);453454leftColumn.add(Box.createRigidArea(VGAP20));455return controls;456}457458public void createListeners() {459buttonDisplayListener = new ItemListener() {460Component c;461AbstractButton b;462463public void itemStateChanged(ItemEvent e) {464JCheckBox cb = (JCheckBox) e.getSource();465String command = cb.getActionCommand();466if(command == "Enabled") {467for(int i = 0; i < currentControls.size(); i++) {468c = currentControls.elementAt(i);469c.setEnabled(cb.isSelected());470c.invalidate();471}472} else if(command == "PaintBorder") {473c = currentControls.elementAt(0);474if(c instanceof AbstractButton) {475for(int i = 0; i < currentControls.size(); i++) {476b = (AbstractButton) currentControls.elementAt(i);477b.setBorderPainted(cb.isSelected());478b.invalidate();479}480}481} else if(command == "PaintFocus") {482c = currentControls.elementAt(0);483if(c instanceof AbstractButton) {484for(int i = 0; i < currentControls.size(); i++) {485b = (AbstractButton) currentControls.elementAt(i);486b.setFocusPainted(cb.isSelected());487b.invalidate();488}489}490} else if(command == "ContentFilled") {491c = currentControls.elementAt(0);492if(c instanceof AbstractButton) {493for(int i = 0; i < currentControls.size(); i++) {494b = (AbstractButton) currentControls.elementAt(i);495b.setContentAreaFilled(cb.isSelected());496b.invalidate();497}498}499}500invalidate();501validate();502repaint();503}504};505506buttonPadListener = new ItemListener() {507Component c;508AbstractButton b;509510public void itemStateChanged(ItemEvent e) {511// *** pad = 0512int pad = -1;513JRadioButton rb = (JRadioButton) e.getSource();514String command = rb.getActionCommand();515if(command == "ZeroPad" && rb.isSelected()) {516pad = 0;517} else if(command == "TenPad" && rb.isSelected()) {518pad = 10;519}520521for(int i = 0; i < currentControls.size(); i++) {522b = (AbstractButton) currentControls.elementAt(i);523if(pad == -1) {524b.setMargin(null);525} else if(pad == 0) {526b.setMargin(insets0);527} else {528b.setMargin(insets10);529}530}531invalidate();532validate();533repaint();534}535};536}537538public void stateChanged(ChangeEvent e) {539SingleSelectionModel model = (SingleSelectionModel) e.getSource();540if(model.getSelectedIndex() == 0) {541currentControls = buttons;542} else if(model.getSelectedIndex() == 1) {543currentControls = radiobuttons;544} else if(model.getSelectedIndex() == 2) {545currentControls = checkboxes;546} else {547currentControls = togglebuttons;548}549}550551public Vector<Component> getCurrentControls() {552return currentControls;553}554}555556557