从JSlider的值改变JLabel的值

3
我有一个包含JSlider和JLabel的单个JPanel。我想要配置它,以便当用户更改JSlider的值时,该新值会反映在JLabel上。
我知道可以使用Slider触发ChangeEvents,但我不知道如何向JLabel添加ChangeListener。这是我的代码片段。
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个回答

5
你不需要在JLabel上监听ChangeEvents,而是需要在JSlider上监听ChangeEvents,然后在stateChanged()方法中使用它。
label.setText("Time: " + scaleSlider.getValue());

不需要从ChangeLisetner触发任何事件。

不要忘记调用repaint()。 - Stroboskop

3
你不需要为JLabel添加一个change listener。如果你的JLabel是包含代码的类的成员字段,你可以在JSlider的change listener中引用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。

2
你需要做的是将更改监听器添加到滑块中。然后在你必须实现的更改方法中,更改JLabel中的文本值。关于你的代码,所有doSomething(int)方法需要做的就是:
label.setText(currentTime + "");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接