从JSlider的值改变JLabel的值

时间:2009-08-06 15:25:41

标签: java swing jlabel jslider

我有一个包含JSlider和JLabel的JPanel。我想配置它,以便当用户更改JSlider的值时,JLabel会反映该新值。

我知道我可以使用Slider触发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??? 

(我现在不知道该怎么做以反映滑块的变化)

我是否朝着正确的方向前进?在此先感谢您的帮助。

3 个答案:

答案 0 :(得分:4)

您不在JLabel上侦听ChangeEvents。你在JSlider上监听ChangeEvents,然后在stateChanged()方法中你只需使用

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

无需从ChangeLisetner中触发任何事件。

答案 1 :(得分:2)

您需要做的是将更改侦听器添加到滑块。

然后,在您必须实施的更改方法中,更改JLabel中文本的值。

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

label.setText(currentTime + "");

答案 2 :(得分:2)

您无需向JLabel添加更改侦听器。如果您的JLabel是包含代码的类的成员字段,您可以在JSlider的更改侦听器中引用JLabel,如下所示:

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

您可以引用任何内部类中的任何外部类的字段,甚至是您在scaleSlider上声明的匿名内部类ChangeListener。