2013-02-04 3 views
1

아래에 changeListener에 대한 코드가 있습니다. 기본적으로 내 Voltage 변수의 값을 JSlider가 현재 위치한 값으로 설정해야합니다. 그래서 내 슬라이더가 5에 있다면 내 변수 Voltage는 5를 읽습니다. 그러나 이것은 일어나지 않으며 나는 이유를 모릅니다. 내 JSlider가있는 현재 값을 갖도록 변수를 설정하는 것이 누락 되었습니까?내 ChangeListener에 문제가 있습니다

public double getVoltageFromSlider() { 

sliders.voltageSlider.addChangeListener(new ChangeListener() { 

public void stateChanged(ChangeEvent event) { 

       Voltage = (double) event.getSource(); 
       Voltage = sliders.voltageSlider.getValue(); 
      } 
     }); 
     return Voltage; 
    } 
+0

질문에 자바 스크립트가 없습니다. – Bergi

+0

'stateChanged'의 첫 줄에서 예외가 발생하지 않습니까? 'event.getSource()'는 JSlider 인스턴스 여야합니다. –

+1

더 나은 도움을 받으려면 [SSCCE] (http://sscce.org/)를 게시하십시오. 프로그램이 전압을 요구할 때마다 다른 청취자가 추가됩니다. 그것은 그 자체로 버그처럼 보입니다. –

답변

1

귀하의 방법은 변경 리스너를 슬라이더에 추가하는 것이고 실제로 값을 검색하지 않습니다. 당신이 반환하는 값은 Voltage 변수에 할당 된 값입니다. 클래스의 필드라고 가정합니다.

+0

슬라이더에있는 값을 검색하고 그 값을 변수 Voltage에 할당하려면 간단한 변경 리스너를 추가하는 대신 무엇을 변경해야합니까? – user2041029

1

전압을 얻는 방법은 두 가지가 있습니다. 슬라이더에서 값을 '당겨서'값을 청취자를 사용하여 voltage 변수에 '밀어 넣는 것'입니다.

Marcelo가 지적한대로 코드가 호출 될 때마다 슬라이더에 ChangeListener을 새로 첨부하지만 현재 수신자를 기다리지 않고 현재 voltage 변수에 바인딩 된 값을 반환합니다. 실제로 값을으로 설정하십시오.

대신 다음 중 하나를 시도해야합니다 :

  1. 어느 슬라이더가 생성 슬라이더에 ChangeListener을 첨부하고 리스너가 voltage 변수의 값을 설정해야합니다. 이 경우 getVoltageFromSlider 메서드가 필요하지 않습니다.
  2. 또는 필요에 따라 슬라이더의 값을 가져 오기 위해 getter를 사용하거나 sliders.voltageSlider.getValue()을 호출하십시오. 이 경우 리스너가 필요하지 않습니다.

그러나 내 제안은 청취자에게 붙어 있습니다.이 방법은 voltage 변수가 항상 최신이기 때문에입니다. 이벤트의 소스가 JSlider 자체이므로 예외가 발생하므로 Voltage = (double) event.getSource() 행을 삭제하십시오.