2012-07-25 3 views
0

프레임에 JSlider 구성 요소가 있으며이 구성 요소는 외부 구성 요소 (새 값을 수시로 설정하는 미디어 플레이어)에 의해 지속적으로 업데이트됩니다. 슬라이더가 내 외부 구성 요소가 아니라 조작 할 때만 슬라이더에서 stateChanged 이벤트를 처리하도록합니다.2 데이터 소스 이벤트 처리를 사용하는 JSlider

이것을 달성 할 방법이 있습니까?

+2

당신은 수도 비슷한 방법으로 직접 setValue 방법을 JSlider 자체를 확장하고 무시하는 것입니다 대신에'JProgressBar'를 사용하십시오. –

답변

1

나는 업데이트를 허용 또는 예하지

UPDATE

는 기본적인 아이디어는 자신을 구현하는 것입니다 여부를 나타냅니다 추가 플래그를 추가 할 수 있습니다 내 자신의 BoundedRangeModel,이 방법을 구현하는 것 모델을 사용하면 값이 실제로 변경된 시점을 제어 할 수 있습니다.

public class MyBoundedRangeModel extends DefaultBoundedRangeModel { 

    private boolean updatesAllowed; 

    public void setUpdatesAllowed(boolean updatesAllowed) { 
     this.updatesAllowed = updatesAllowed; 
    } 

    public boolean isUpdatesAllowed() { 
     return updatesAllowed; 
    } 

    @Override 
    public void setMinimum(int n) { 
     setUpdatesAllowed(true); 
     super.setMinimum(n); 
     setUpdatesAllowed(false); 
    } 

    @Override 
    public void setMaximum(int n) { 
     setUpdatesAllowed(true); 
     super.setMaximum(n); 
     setUpdatesAllowed(false); 
    } 

    @Override 
    public void setExtent(int n) { 
     setUpdatesAllowed(true); 
     super.setExtent(n); 
     setUpdatesAllowed(false); 
    } 

    @Override 
    public void setValue(int n) { 
     super.setValue(n); 
    } 

    @Override 
    public void setValueIsAdjusting(boolean b) { 
     setUpdatesAllowed(true); 
     super.setValueIsAdjusting(b); 
     setUpdatesAllowed(false); 
    } 

    @Override 
    public void setRangeProperties(int newValue, int newExtent, int newMin, int newMax, boolean adjusting) {   
     if (isUpdatesAllowed()) { 
      super.setRangeProperties(newValue, newExtent, newMin, newMax, adjusting); 
     } 
    } 

} 

이렇게하면 "값"속성의 변경을 제어 할 수 있습니다. 여기에있는 문제는 모든 설정 메서드가 setRangeProperties 메서드를 거쳐서 무엇을 허용해야하는지 결정해야한다는 것입니다. 나의 예에서는, 그것을 제어하지 않는 유일한 방법은 setValue 방법이다. 코드에서

당신이 뭔가 같이 호출 할 필요가 ...

MyBoundedRangeModel boundedRangeModel = new MyBoundedRangeModel(); 
slider.setModel(boundedRangeModel); 

... 

boundedRangeModel.setUpdatesAllowed(true); 
slider.setValue(value); 
boundedRangeModel.setUpdatesAllowed(false); 

귀하의 유일한 선택은

+0

내부 구성 요소에서 슬라이더를 업데이트 할 때 "stateChanged"이벤트를 비활성화해야합니다. .NET과 같은 처리 된 메서드가 있습니까? –

+0

'StateChanged' 이벤트에 없습니다. – MadProgrammer

관련 문제