프레임에 JSlider 구성 요소가 있으며이 구성 요소는 외부 구성 요소 (새 값을 수시로 설정하는 미디어 플레이어)에 의해 지속적으로 업데이트됩니다. 슬라이더가 내 외부 구성 요소가 아니라 조작 할 때만 슬라이더에서 stateChanged 이벤트를 처리하도록합니다.2 데이터 소스 이벤트 처리를 사용하는 JSlider
이것을 달성 할 방법이 있습니까?
프레임에 JSlider 구성 요소가 있으며이 구성 요소는 외부 구성 요소 (새 값을 수시로 설정하는 미디어 플레이어)에 의해 지속적으로 업데이트됩니다. 슬라이더가 내 외부 구성 요소가 아니라 조작 할 때만 슬라이더에서 stateChanged 이벤트를 처리하도록합니다.2 데이터 소스 이벤트 처리를 사용하는 JSlider
이것을 달성 할 방법이 있습니까?
나는 업데이트를 허용 또는 예하지
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);
귀하의 유일한 선택은
내부 구성 요소에서 슬라이더를 업데이트 할 때 "stateChanged"이벤트를 비활성화해야합니다. .NET과 같은 처리 된 메서드가 있습니까? –
'StateChanged' 이벤트에 없습니다. – MadProgrammer
당신은 수도 비슷한 방법으로 직접
setValue
방법을JSlider
자체를 확장하고 무시하는 것입니다 대신에'JProgressBar'를 사용하십시오. –