import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class SliderTest extends JFrame { private JSlider diameter; private OvalPanel myPanel; public SliderTest() { super( "Slider Demo" ); myPanel = new OvalPanel(); myPanel.setBackground( Color.yellow ); diameter = new JSlider( SwingConstants.HORIZONTAL, 0, 200, 10 ); diameter.setMajorTickSpacing( 10 ); diameter.setPaintTicks( true ); diameter.addChangeListener( new ChangeListener() { public void stateChanged( ChangeEvent e ) { myPanel.setDiameter( diameter.getValue() ); } } ); Container c = getContentPane(); c.add( diameter, BorderLayout.SOUTH ); c.add( myPanel, BorderLayout.CENTER ); setSize( 220, 270 ); show(); } public static void main( String args[] ) { SliderTest app = new SliderTest(); app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } }
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; public class SliderDemo extends JFrame implements ActionListener { //Set up animation parameters. static final int FPS_INIT = 15; //initial frames per second int frameNumber = 0; int delay; Timer timer; boolean frozen = false; //This label uses ImageIcon to show the doggy pictures. JLabel picture; public SliderDemo(String windowTitle) { super(windowTitle); delay = 1000 / FPS_INIT; //Create the slider and its label JLabel sliderLabel = new JLabel("Frames Per Second", JLabel.CENTER); sliderLabel.setAlignmentX(Component.CENTER_ALIGNMENT); JSlider framesPerSecond = new JSlider(JSlider.HORIZONTAL, 0, 30, FPS_INIT); framesPerSecond.addChangeListener(new SliderListener()); //Turn on labels at major tick marks. framesPerSecond.setMajorTickSpacing(10); framesPerSecond.setMinorTickSpacing(1); framesPerSecond.setPaintTicks(true); framesPerSecond.setPaintLabels(true); framesPerSecond.setBorder( BorderFactory.createEmptyBorder(0,0,10,0)); //Create the label for the animation. picture = new JLabel(new ImageIcon("doggy/T" + frameNumber + ".gif"), JLabel.CENTER); picture.setAlignmentX(Component.CENTER_ALIGNMENT); picture.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createLoweredBevelBorder(), BorderFactory.createEmptyBorder(10,10,10,10))); //Put everything in the content pane. JPanel contentPane = new JPanel(); contentPane.setLayout(new BoxLayout(contentPane, BoxLayout.Y_AXIS)); contentPane.add(sliderLabel); contentPane.add(framesPerSecond); contentPane.add(picture); contentPane.setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); setContentPane(contentPane); //Set up a timer that calls this object's action handler. timer = new Timer(delay, this); timer.setInitialDelay(delay * 10); //pauses animation after frames //0 and 6 by restarting the timer timer.setCoalesce(true); //Add a listener for window events addWindowListener(new WindowAdapter() { public void windowIconified(WindowEvent e) { stopAnimation(); } public void windowDeiconified(WindowEvent e) { startAnimation(); } public void windowClosing(WindowEvent e) { System.exit(0); } }); } /** Listens to the slider. */ class SliderListener implements ChangeListener { public void stateChanged(ChangeEvent e) { JSlider source = (JSlider)e.getSource(); if (!source.getValueIsAdjusting()) { int fps = (int)source.getValue(); if (fps == 0) { if (!frozen) stopAnimation(); } else { delay = 1000 / fps; timer.setDelay(delay); timer.setInitialDelay(delay * 10); if (frozen) startAnimation(); } } } } public void startAnimation() { //Start (or restart) animating! timer.start(); frozen = false; } public void stopAnimation() { //Stop the animating thread. timer.stop(); frozen = true; } //Called when the Timer fires public void actionPerformed(ActionEvent e) { //Advance the animation frame. if (frameNumber==13) { frameNumber = 0; } else { frameNumber++; } //XXX no caching? picture.setIcon(new ImageIcon("doggy/T" + frameNumber + ".gif")); if (frameNumber==0 || frameNumber==6) { timer.restart(); } } public static void main(String[] args) { SliderDemo animator = new SliderDemo("SliderDemo"); animator.pack(); animator.setVisible(true); animator.startAnimation(); } }
import java.awt.*; import java.awt.event.*; import javax.swing.*; import javax.swing.event.*; import java.util.Hashtable; public class SliderDemo2 extends JFrame implements ActionListener { //Set up animation parameters. static final int FPS_INIT = 15; //initial frames per second int frameNumber = 0; int delay; Timer timer; boolean frozen = false; //This label uses ImageIcon to show the doggy pictures. JLabel picture; public SliderDemo2(String windowTitle) { super(windowTitle); delay = 1000 / FPS_INIT; //Create the slider. JSlider framesPerSecond = new JSlider(JSlider.VERTICAL, 0, 30, FPS_INIT); framesPerSecond.addChangeListener(new SliderListener()); framesPerSecond.setMajorTickSpacing(10); framesPerSecond.setPaintTicks(true); //Create the label table. Hashtable labelTable = new Hashtable(); //PENDING: could use images, but we don't have any good ones. labelTable.put(new Integer( 0 ), new JLabel("Stop") ); //new JLabel(new ImageIcon("images/stop.gif")) ); labelTable.put(new Integer( 3 ), new JLabel("Slow") ); //new JLabel(new ImageIcon("images/slow.gif")) ); labelTable.put(new Integer( 30 ), new JLabel("Fast") ); //new JLabel(new ImageIcon("images/fast.gif")) ); framesPerSecond.setLabelTable(labelTable); framesPerSecond.setPaintLabels(true); framesPerSecond.setBorder( BorderFactory.createEmptyBorder(0,0,0,10)); //Create the label for the animation. picture = new JLabel(new ImageIcon("doggy/T" + frameNumber + ".gif"), JLabel.CENTER); picture.setAlignmentX(Component.CENTER_ALIGNMENT); picture.setBorder(BorderFactory.createCompoundBorder( BorderFactory.createLoweredBevelBorder(), BorderFactory.createEmptyBorder(10,10,10,10))); //Put everything in the content pane. JPanel contentPane = new JPanel(); contentPane.setLayout(new BorderLayout()); contentPane.add(framesPerSecond, BorderLayout.WEST); contentPane.add(picture, BorderLayout.CENTER); contentPane.setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); setContentPane(contentPane); //Set up a timer that calls this object's action handler. timer = new Timer(delay, this); timer.setInitialDelay(delay * 10); //pauses animation after frames //0 and 6 by restarting the timer timer.setCoalesce(true); //Add a listener for window events addWindowListener(new WindowAdapter() { public void windowIconified(WindowEvent e) { stopAnimation(); } public void windowDeiconified(WindowEvent e) { startAnimation(); } public void windowClosing(WindowEvent e) { System.exit(0); } }); } /** Listens to the slider. */ class SliderListener implements ChangeListener { public void stateChanged(ChangeEvent e) { JSlider source = (JSlider)e.getSource(); if (!source.getValueIsAdjusting()) { int fps = (int)source.getValue(); if (fps == 0) { if (!frozen) stopAnimation(); } else { delay = 1000 / fps; timer.setDelay(delay); timer.setInitialDelay(delay * 10); if (frozen) startAnimation(); } } } } public void startAnimation() { //Start (or restart) animating! timer.start(); frozen = false; } public void stopAnimation() { //Stop the animating thread. timer.stop(); frozen = true; } //Called when the Timer fires public void actionPerformed(ActionEvent e) { //Advance the animation frame. if (frameNumber==13) { frameNumber = 0; } else { frameNumber++; } //XXX no caching? picture.setIcon(new ImageIcon("doggy/T" + frameNumber + ".gif")); if (frameNumber==0 || frameNumber==6) { timer.restart(); } } public static void main(String[] args) { SliderDemo2 animator = new SliderDemo2("SliderDemo2"); animator.pack(); animator.setVisible(true); animator.startAnimation(); } }
Maintained by John Loomis, last updated 20 June 2000