2009-08-06 3 views
3

JSlider와 JLabel이 포함 된 JPanel이 하나 있습니다. JSlider의 값이 사용자에 의해 변경 될 때 새로운 값이 JLabel에 반영되도록 구성하려고합니다.JSlider 값에서 JLabel 값 변경

나는 슬라이더로 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??? 

나는이와 함께 올바른 방향으로 가고 있는가

(I 슬라이더의 변화를 반영하기 위해 지금 여기에 무엇을 해야할지하지 않습니다)? 귀하의 도움에 미리 감사드립니다.

답변

2

변경 사항 수신기를 슬라이더에 추가하면됩니다.

그런 다음 구현해야하는 변경 방법에서 JLabel의 텍스트 값을 변경하십시오.

는 코드에 대해서는, doSomething(int) 방법을 수행하는 데 필요한 모든입니다 : 당신은 JLabel의에의 ChangeEvent를 수신하지 않습니다

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

감사합니다. –

+0

도와 주셔서 감사합니다. – jjnguy

4

. 당신은 당신이 단순히 어느 ChangeLisetner에서 어떤 이벤트를 해고

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

필요가 없습니다를 사용하는 JSlider에에 다음 따라서, stateChanged() 메소드에서의 ChangeEvent를 수신.

+0

감사합니다. 이 것을 지나치게 경계하십시오. –

+0

repaint()를 호출하는 것을 잊지 마세요. – Stroboskop

+0

'setText()'가 올바르게 기억되면 자동으로 다시 그립니다. –

2

변경 리스너를 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도 포함됩니다.