Search code examples
javaswingjslider

Acquire value for every change in JSlider


I am trying to get the value of the JSlider for every time I change the slider position. I decided to test it by print it first.

package training;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;   
import javax.swing.event.*;

public class Temperature extends JSlider {

    JSlider Temp = new JSlider(-50, 50, 0);

    public Temperature (){
        add(Temp);
        Temp.setMajorTickSpacing(10);
        Temp.setMinorTickSpacing(1);

        Temp.addChangeListener(new ChangeListener () {
             public void stateChanged(ChangeEvent evt) {
            JSlider Temp = (JSlider) evt.getSource();
            if (!Temp.getValueIsAdjusting()) {
            int value = Temp.getValue();
            System.out.println(value);
                    }
                  }
            });
    }
}

And then I call the method in the main class:

public static void main(String[] args) {
        Temperature ns = new Temperature();
        System.out.println("User dir: " + System.getProperty("user.dir"));
        JFrame f = new JFrame("Window");
        JPanel p = new Training();

        ns.add(new Temperature());

           f.setSize(1100, 600);
           p.setSize(750, 600); 
           f.add(p);
           f.add(ns, BorderLayout.EAST);
           f.setVisible(true);

}

But the console didn't print any value when I change the slider position. Any idea of where the flaw of my code is?


Solution

  • First, change:

    public class Temperature extends JSlider {
    
        JSlider Temp = new JSlider(-50, 50, 0);
    

    To:

    public class Temperature { // NO NEED TO EXTEND HERE!
    
        JSlider Temp = new JSlider(-50, 50, 0);
    

    ..then provide a method to return the slider that actually has a change listener attached.