2009-08-06 77 views
3

我有一个包含JSlider和JLabel的JPanel。我想对其进行配置,以便在用户更改JSlider的值时,该新值由JLabel反映。从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??? 

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

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

回答

2

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

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

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

label.setText(currentTime + ""); 
+1

完美,谢谢。 – 2009-08-06 15:37:14

+0

欢迎您,很高兴帮助! – jjnguy 2009-08-06 15:39:13

4

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

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

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

+0

谢谢。 Def默认这一个。 – 2009-08-06 15:36:41

+0

如果我没有记错,请不要忘记调用repaint() – Stroboskop 2009-08-06 17:50:02

+0

'setText()'自动重新绘制。 – 2009-08-06 17:52:20

2

您不需要将更改侦听器添加到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); 
      } 
     } 
    } 
} 

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