Java 获取JSlider中每次更改的值

Java 获取JSlider中每次更改的值,java,swing,jslider,Java,Swing,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); p

每次更改滑块位置时,我都会尝试获取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);
                    }
                  }
            });
    }
}
然后我调用主类中的方法:

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);
致:


..然后提供一种方法返回实际连接了更改侦听器的滑块。

您走对了轨道。。。 我最好的建议是倾听

倾听变化

当你倾听他们时,如果你的听力很好。。 然后,你至少应该能够解释你不断听到的变化是什么

changeListener是您能够听到所听内容变化的地方。对于Jbutton,它类似于动作侦听器


如果单击了按钮,您将侦听该单击。发出单击后,将听到它,然后在其中执行您指定的抽象方法

1为了更快地获得更好的帮助,请发布一个or。2请学习常见的Java命名约定-例如,EachWordUpperCaseClass、firstWordLowerCaseMethod、firstWordLowerCaseAttribute,除非它是大写常量并一致使用。3在源代码中只需要一行空白就可以了。{或}之前的空行通常也是多余的。4使用缩进代码行和代码块的逻辑和一致形式。。。。缩进的目的是使代码的流程更易于遵循!你在给JSlider添加一个JSlider-怀疑-你没有听对slider@MadProgrammer我删除了addTemp;控制台仍然没有打印任何内容。@Conan您仍然在听一个不在屏幕上的JSlider。把温度课全部放下,这太令人困惑了。手动创建和配置JSlider实例,您可能希望从组件进行扩展。。。但我只需要创建一个工厂方法来返回配置为required@MadProgrammer可能要从组件扩展。。。想要和需要不一样。我对编码员“想要什么”不感兴趣;但我会创建一个工厂方法,这很好。真的没有。。我需要你!对于一个单独的类,@Andrew Thompson删除extends JSlider,那么我无法访问主类中的温度。你是一直读到简短答案的结尾,还是你的注意力没有集中?我试着按照@MadProgrammer的建议删除温度类,结果成功了。“谢谢你的帮助,在这里提问之前,我会努力学习更多的基本知识,”安德鲁·汤普森说
public class Temperature { // NO NEED TO EXTEND HERE!

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