2009-08-06 5 views
3

JSliderとJLabelを含むJPanelが1つあります。 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

完璧、ありがとう。 –

+0

あなたを助けてくれることを歓迎します! – jjnguy

4

あなたはJLabelの上でChangeEventのために聞いていません。あなたは、単にどちらかChangeLisetnerから任意のイベントを発生する

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

不要を使用JSliderの上、その後のstateChanged()メソッド内でChangeEventを聞きます。

+0

ありがとうございます。これを過度に考え直す。 –

+0

repaint()を呼び出すことを忘れないでください。 – Stroboskop

+0

'setText()'は、正しく覚えていれば自動的に再描画します。 –

2

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

あなたはどんなインナークラス内の任意の外部クラスのフィールドを参照することができます:あなたのJLabelのコードを含むクラスのメンバフィールドである場合は、そのように、JSliderのの変更リスナー内のJLabelを参照することができますscaleSliderで宣言した匿名の内部クラスのChangeListenerでさえも。

関連する問題