Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Jslider应该在事件停止时触发更改事件_Java_Swing_Jslider - Fatal编程技术网

Java Jslider应该在事件停止时触发更改事件

Java Jslider应该在事件停止时触发更改事件,java,swing,jslider,Java,Swing,Jslider,我的JAVA应用程序中有一个滑块。我已经为该滑块编写了更改侦听器。这是我写的代码 jSlider = new JSlider(JSlider.HORIZONTAL,0,30,2); jSlider.setFont(new Font("Dialog", Font.BOLD, 10)); jSlider.setMinorTickSpacing(1); jSlider.setMajorTickSpacing(2); jSlider.set

我的
JAVA
应用程序中有一个滑块。我已经为该滑块编写了更改侦听器。这是我写的代码

jSlider = new JSlider(JSlider.HORIZONTAL,0,30,2);
        jSlider.setFont(new Font("Dialog", Font.BOLD, 10));
        jSlider.setMinorTickSpacing(1);
        jSlider.setMajorTickSpacing(2);
        jSlider.setPaintTicks(true);
        jSlider.setPaintLabels(true);
        jSlider.setBounds(76, 564, 586, 55);
        jSlider.addChangeListener(new ChangeListener() {

            @Override
            public void stateChanged(ChangeEvent arg0) {
                // TODO Auto-generated method stub
                textField.setText(String.valueOf(jSlider.getValue()));
            }
        });
        getContentPane().add(jSlider);  
此代码提供滑块的连续变化值

但是我想要滑块的静止位置的值。
我应该写什么来只获取静止位置的值?

基本上,您可以在引发
stateChanged
事件和更新
textField
之间插入一个“强制延迟”

这基本上意味着在尝试更新
textField
之前,我们要等待一段固定的时间,从上次调用
stateChanged
方法开始

因为我们不想阻止事件调度线程,因为它会阻止任何新事件的处理,所以我使用了
javax.swing.Timer

基本上,每当调用
stateChanged
方法时,我都会重新启动计时器。一旦事件停止,计时器将被允许完成并触发一个
actionPerformed
事件,该事件允许我们更新
textField
…easy;)

现在,我故意使用了一个较大的延迟值,您可能希望使用它

而且,
setBounds
是一个非常糟糕的主意。我会把时间花在学习layout manager API上,从长远来看,这会让你省去很多心痛;)

我们也可以使用

jSlider.addChangeListener(new ChangeListener() {

            @Override
            public void stateChanged(ChangeEvent e) {
                // TODO Auto-generated method stub
                JSlider source = (JSlider)e.getSource();
                if(!source.getValueIsAdjusting())
                {
                    //textField.setText(String.valueOf(source.getValue()));
                    int gain = source.getValue();
                    //System.out.println("***** GAIN ***** "+gain);
                    GetGain g = new GetGain(gain);
                }
            }
        });
上面的代码还提供了滑块静止位置的值

jSlider.addChangeListener(new ChangeListener() {

            @Override
            public void stateChanged(ChangeEvent e) {
                // TODO Auto-generated method stub
                JSlider source = (JSlider)e.getSource();
                if(!source.getValueIsAdjusting())
                {
                    //textField.setText(String.valueOf(source.getValue()));
                    int gain = source.getValue();
                    //System.out.println("***** GAIN ***** "+gain);
                    GetGain g = new GetGain(gain);
                }
            }
        });