从JSlider的值改变JLabel的值

我有一个包含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??? 

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

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

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

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

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

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

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

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

 label.setText(currentTime + ""); 

您无需向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。