JSlider

SliderTest.java

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);
   }
}

SliderDemo.java

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();
    }
}

SliderDemo2.java

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