从JSlider的值更改一个JLabel的价值(Changing a JLabel's Va

2019-06-28 07:23发布

我有一个包含JSlider的和JLabel单一的JPanel。 我想进行配置,以便当JSlider的价值正在被用户改变,新值由JLabel的体现。

我知道我可以解雇ChangeEvents的与滑块,但我不知道怎么一个ChangeListener添加到JLabel的。 下面是我的代码片段。

scaleSlider.addChangeListener(new ChangeListener() {
    public void stateChanged(ChangeEvent event)
    {
        int currentTime = ((JSlider)event.getSource()).getValue();
        doSomething(currentTime);
        fireStateChanged(event);
    }

JLabel timeValue = new JLabel("Time: " + scaleSlider.getValue());
timeValue.add??? 

(我不知道现在给这里做以反映滑块的变化)

我在这个正确的方向前进? 在此先感谢您的帮助。

Answer 1:

你不听上一个JLabel ChangeEvents的。 你听有关JSlider的ChangeEvent的,然后你只需使用stateChanged()方法

label.setText("Time: " + scaleSlider.getValue());

无需任何火从ChangeLisetner的任何事件。



Answer 2:

什么,你需要做的是改变监听器添加到滑块。

然后,在你必须实现改变方法,更改文本的价值JLabel

关于你的代码,所有的doSomething(int)方法需要做的是:

label.setText(currentTime + "");


Answer 3:

你并不需要改变监听器添加到JLabel的。 如果您的JLabel是包含代码类的成员字段,你可以参考JLabel中的JSlider的的变化监听器内,像这样:

public class Test() {
    private JLabel label;

    private void setup() {
        label = new JLabel();
        JSlider scaleSlider = new JSlider();
        scaleSlider.addChangeListener(new ChangeListener() {

            public void stateChanged(ChangeEvent event) {
                int currentTime = ((JSlider)event.getSource()).getValue();
                label.setText(currentTime);
            }
        }
    }
}

您可以指任何外部类的字段中的任何内部类,的ChangeListener你在scaleSlider宣布即使是匿名内部类中。



文章来源: Changing a JLabel's Value from a JSlider's Value