为 JSlider 的每一次变化获取价值

Acquire value for every change in JSlider

每次更改滑块位置时,我都试图获取 JSlider 的值。我决定先打印出来测试一下。

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

然后我在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);

}

但是当我更改滑块位置时,控制台没有打印任何值。 知道我的代码的缺陷在哪里吗?

首先,改变:

public class Temperature extends JSlider {

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

收件人:

public class Temperature { // NO NEED TO EXTEND HERE!

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

..然后为 return 实际附加了更改侦听器的滑块提供一种方法。

你走在正确的轨道上...... 我最好的建议是倾听。

聆听变化。

当您倾听他们的声音时,如果您的 "hearing" 很好.. 然后,您至少应该能够在您不断聆听的内容中解释变化是什么。

changeListener 是您可以听到正在收听的内容发生变化的地方。它类似于 Jbutton 的动作侦听器。

如果单击了一个按钮,则您 "Listen" 负责该次单击。调度点击后,它是 "heard",然后在其中执行您指定的抽象方法。