blob: d0edd96ba7e98607539b100ea9f695b46da830b1 [file] [log] [blame]
/* SpinnerDemo.java -- An example showing various spinners in Swing.
Copyright (C) 2006, Free Software Foundation, Inc.
This file is part of GNU Classpath examples.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.
*/
package gnu.classpath.examples.swing;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Calendar;
import java.util.Date;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JSpinner;
import javax.swing.SpinnerDateModel;
import javax.swing.SpinnerListModel;
import javax.swing.SpinnerNumberModel;
import javax.swing.SwingUtilities;
/**
* A simple demo showing various spinners in different states.
*/
public class SpinnerDemo
extends JPanel
implements ActionListener
{
private JCheckBox spinnerState1;
private JSpinner spinner1;
private JSpinner spinner2;
private JCheckBox spinnerState2;
private JSpinner spinner3;
private JSpinner spinner4;
private JCheckBox spinnerState3;
private JSpinner spinner5;
private JSpinner spinner6;
/**
* Creates a new demo instance.
*/
public SpinnerDemo()
{
super();
createContent();
}
/**
* When the demo is run independently, the frame is displayed, so we should
* initialise the content panel (including the demo content and a close
* button). But when the demo is run as part of the Swing activity board,
* only the demo content panel is used, the frame itself is never displayed,
* so we can avoid this step.
*/
void initFrameContent()
{
JPanel closePanel = new JPanel();
JButton closeButton = new JButton("Close");
closeButton.setActionCommand("CLOSE");
closeButton.addActionListener(this);
closePanel.add(closeButton);
add(closePanel, BorderLayout.SOUTH);
}
/**
* Returns a panel with the demo content. The panel
* uses a BorderLayout(), and the BorderLayout.SOUTH area
* is empty, to allow callers to add controls to the
* bottom of the panel if they want to (a close button is
* added if this demo is being run as a standalone demo).
*/
private void createContent()
{
setLayout(new BorderLayout());
JPanel panel = new JPanel(new GridLayout(3, 1));
panel.add(createPanel1());
panel.add(createPanel2());
panel.add(createPanel3());
add(panel);
}
private JPanel createPanel1()
{
JPanel panel = new JPanel(new BorderLayout());
this.spinnerState1 = new JCheckBox("Enabled", true);
this.spinnerState1.setActionCommand("COMBO_STATE1");
this.spinnerState1.addActionListener(this);
panel.add(this.spinnerState1, BorderLayout.EAST);
JPanel controlPanel = new JPanel();
controlPanel.setBorder(BorderFactory.createTitledBorder(
"Number Spinner: "));
this.spinner1 = new JSpinner(new SpinnerNumberModel(5.0, 0.0, 10.0, 0.5));
this.spinner2 = new JSpinner(new SpinnerNumberModel(50, 0, 100, 5));
this.spinner2.setFont(new Font("Dialog", Font.PLAIN, 20));
controlPanel.add(this.spinner1);
controlPanel.add(this.spinner2);
panel.add(controlPanel);
return panel;
}
private JPanel createPanel2()
{
JPanel panel = new JPanel(new BorderLayout());
this.spinnerState2 = new JCheckBox("Enabled", true);
this.spinnerState2.setActionCommand("COMBO_STATE2");
this.spinnerState2.addActionListener(this);
panel.add(this.spinnerState2, BorderLayout.EAST);
JPanel controlPanel = new JPanel();
controlPanel.setBorder(BorderFactory.createTitledBorder("Date Spinner: "));
this.spinner3 = new JSpinner(new SpinnerDateModel(new Date(), null, null,
Calendar.DATE));
this.spinner4 = new JSpinner(new SpinnerDateModel(new Date(), null, null,
Calendar.YEAR));
this.spinner4.setFont(new Font("Dialog", Font.PLAIN, 20));
controlPanel.add(this.spinner3);
controlPanel.add(this.spinner4);
panel.add(controlPanel);
return panel;
}
private JPanel createPanel3()
{
JPanel panel = new JPanel(new BorderLayout());
this.spinnerState3 = new JCheckBox("Enabled", true);
this.spinnerState3.setActionCommand("COMBO_STATE3");
this.spinnerState3.addActionListener(this);
panel.add(this.spinnerState3, BorderLayout.EAST);
JPanel controlPanel = new JPanel();
controlPanel.setBorder(BorderFactory.createTitledBorder("List Spinner: "));
this.spinner5 = new JSpinner(new SpinnerListModel(new Object[] {"Red",
"Orange", "Yellow", "Green", "Blue", "Indigo", "Violet"}));
this.spinner6 = new JSpinner(new SpinnerListModel(new Object[] {"Red",
"Orange", "Yellow", "Green", "Blue", "Indigo", "Violet"}));
this.spinner6.setValue("Yellow");
this.spinner6.setFont(new Font("Dialog", Font.PLAIN, 20));
controlPanel.add(this.spinner5);
controlPanel.add(this.spinner6);
panel.add(controlPanel);
return panel;
}
public void actionPerformed(ActionEvent e)
{
if (e.getActionCommand().equals("COMBO_STATE1"))
{
spinner1.setEnabled(spinnerState1.isSelected());
spinner2.setEnabled(spinnerState1.isSelected());
}
else if (e.getActionCommand().equals("COMBO_STATE2"))
{
spinner3.setEnabled(spinnerState2.isSelected());
spinner4.setEnabled(spinnerState2.isSelected());
}
else if (e.getActionCommand().equals("COMBO_STATE3"))
{
spinner5.setEnabled(spinnerState3.isSelected());
spinner6.setEnabled(spinnerState3.isSelected());
}
else if (e.getActionCommand().equals("CLOSE"))
{
System.exit(0);
}
}
public static void main(String[] args)
{
SwingUtilities.invokeLater
(new Runnable()
{
public void run()
{
SpinnerDemo app = new SpinnerDemo();
app.initFrameContent();
JFrame frame = new JFrame("Spinner Demo");
frame.getContentPane().add(app);
frame.pack();
frame.setVisible(true);
}
});
}
/**
* Returns a DemoFactory that creates a SpinnerDemo.
*
* @return a DemoFactory that creates a SpinnerDemo
*/
public static DemoFactory createDemoFactory()
{
return new DemoFactory()
{
public JComponent createDemo()
{
return new SpinnerDemo();
}
};
}
}