Here is that self contained simple example.
package ca.sarah_happy.sandbox.circles; import java.awt.BorderLayout; import java.awt.Container; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JSlider; import javax.swing.SwingUtilities; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; public class SliderSample implements Runnable { public static void main(String[] args) { /* * do all the work on the GUI thread. */ SwingUtilities.invokeLater(new SliderSample()); } /* * things I will need access to later. */ private JSlider slider; private JLabel label; /* * do the work of creating the user interface. */ @Override public void run() { slider = new JSlider(); slider.setPaintTicks(true); slider.setPaintLabels(true); slider.setMaximum(127); slider.setMinimum(-128); slider.setMajorTickSpacing(32); slider.setMinorTickSpacing(8); slider.setValue(0); label = new JLabel("value = " + slider.getValue()); JFrame frame = new JFrame("Slider Sample"); frame.setLocationByPlatform(true); frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); Container p = frame.getContentPane(); p.add(label, BorderLayout.SOUTH); p.add(slider); slider.addChangeListener(sliderChangeListener); frame.pack(); frame.setVisible(true); } /* * and things that will be triggered later */ private ChangeListener sliderChangeListener = new ChangeListener() { @Override public void stateChanged(ChangeEvent e) { String adjust = ""; if (slider.getValueIsAdjusting()) { adjust = " (adjusting)"; } label.setText("value = " + slider.getValue() + adjust); } }; }