2

I'm learning about change listeners and would like to find out why a part of my coding is not making a change listener fire when the user moves a slider.

Here is the listener. Everything is in the same method:

ChangeListener lst = new ChangeListener() {
    public void stateChanged(ChangeEvent e) {
        showDate();
    }
};

Here is some code that adds the listener:

m_slDay = new JSlider(JSlider.HORIZONTAL, 1, maxDays,
    m_calendar.get(Calendar.DAY_OF_MONTH));
m_slDay.setPaintLabels(true);
m_slDay.setMajorTickSpacing(5);
m_slDay.setMinorTickSpacing(1);
m_slDay.setPaintTicks(true);

// This line of code seems to work.  
m_slDay.addChangeListener(lst);

p = new JPanel();
p.setBorder(new TitledBorder(new EtchedBorder(), "Day"));
p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
p.add(Box.createRigidArea(RIGID_DIMENSION));
p.add(m_slDay);
p.add(Box.createRigidArea(RIGID_DIMENSION));
p1.add(p);

This code is based on the above chunk of code but nothing happens when the user moves the slider:

m_slDayOfWeek = new JSlider(JSlider.HORIZONTAL, 1, maxDaysOfTheWeek,
    m_calendar.get(Calendar.DAY_OF_WEEK));
m_slDayOfWeek.setPaintLabels(true);
m_slDayOfWeek.setMajorTickSpacing(1);
m_slDayOfWeek.setMinorTickSpacing(1);
m_slDayOfWeek.setPaintTicks(true);

// This one is not working and I'm not sure why it's happening.
m_slDayOfWeek.addChangeListener(lst);

p = new JPanel();
p.setBorder(new TitledBorder(new EtchedBorder(), "Day of Week"));
p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));
p.add(Box.createRigidArea(RIGID_DIMENSION));
p.add(m_slDayOfWeek);
p.add(Box.createRigidArea(RIGID_DIMENSION));
p1.add(p);
Bill the Lizard
  • 398,270
  • 210
  • 566
  • 880
Emad-ud-deen
  • 4,734
  • 21
  • 87
  • 152
  • 1
    I can't help suspecting that the problem is in one of the lines you didn't post. What does the showDate() method do? Have you tried putting breakpoints or println statements in it to check whether it's reached? – Andrew Spencer Mar 22 '12 at 15:00
  • 1
    what does your `showDate()` method do? Can you add a breakpoint or some syserr debug statements at this location to prove to yourself that nothing is happening? – Chris White Mar 22 '12 at 15:02
  • 1
    Thanks Everyone. Good catch. It was in the showDate() method. One of the if statements was not executing. Using System.out.println() proved the method was executing but not some of my code. – Emad-ud-deen Mar 22 '12 at 15:23

1 Answers1

3

Seems like there is something wrong in your code part, as pointed out in comments in your showDate() method, this thing works flawlessly in this code :

import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class SliderChangeEffect extends JFrame
{
    private JSlider slider;
    private int count = 0;
    private ChangeListener changeListener = new ChangeListener()
    {
        public void stateChanged(ChangeEvent ce)
        {
            System.out.println(count++);
        }
    };

    private void createAndDisplayGUI()
    {
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationByPlatform(true);

        JPanel contentPane = new JPanel();
        contentPane.setOpaque(true);

        slider = new JSlider(0, 10, 5);
        slider.setMajorTickSpacing(2);
        slider.setMinorTickSpacing(1);
        slider.addChangeListener(changeListener);

        contentPane.add(slider);

        getContentPane().add(contentPane);
        pack();
        setVisible(true);
    }

    public static void main(String... args)
    {
        SwingUtilities.invokeLater(new Runnable()
        {
            public void run()
            {
                new SliderChangeEffect().createAndDisplayGUI();
            }
        });
    }
}
nIcE cOw
  • 24,468
  • 7
  • 50
  • 143