没有从 JSlider 获得价值 [英] Not getting value from JSlider

查看:39
本文介绍了没有从 JSlider 获得价值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在我的程序中使用了 JSlider,并为此实现了一个 ChangeListener.

I am using a JSlider in my program, and have implemented a ChangeListener for the same.

public void stateChanged(ChangeEvent e)
    {
        JSlider source=(JSlider) e.getSource();
        frame_value.setText(Integer.toString(source.getValue()));

        //Condition to change the frame_no only when user has stopped moving the slider
        if (!source.getValueIsAdjusting()) 
        {
            frame_no=(int) source.getValue()-1;
            if(frame_no<0)
                frame_no=0;
        }
        ....
}

发生的事情是,无论何时调用 ChangeListener,程序都会跳过 if 块,然后转到代码.我不明白为什么会这样.我无法从 JSlider 获得正确的值.请帮忙!!

What is happening is, that whenever the ChangeListener is called, the program just skips the if block, and goes to the code after that. I don't understand why is this happening. I am not able to get the correct value from the JSlider. Please help!!

PS:不知道是不是这个原因,不过最近我设置了JSlider的UI,在我点击的地方打勾.不知道是不是这个原因.代码如下:

PS: I don't know if this is the reason, but recently I have set the UI of the JSlider to place the tick where I click it. I don't know if that is responsible for it or not. Here is the code:

slider.setUI(new MetalSliderUI() {
                protected void scrollDueToClickInTrack(int direction) {
                    int value = HEVC_Analyzer.slider.getValue(); 

                   value = this.valueForXPosition(HEVC_Analyzer.slider.getMousePosition().x);
                   HEVC_Analyzer.slider.setValue(value);
                }
            });

推荐答案

一定是你的代码有问题,因为它在这个例子中工作正常:

Must be something wrong in your code, since it's working fine in this example :

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)
        {
            JSlider slider = (JSlider) ce.getSource();
            if (!slider.getValueIsAdjusting())
                System.out.println(slider.getValue());
        }
    };

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

这篇关于没有从 JSlider 获得价值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆