2009-08-06 40 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。