我的框架上有一個JSlider組件,它不斷地被外部組件(媒體播放器隨時設置一個新值)更新。我只想在滑塊處理stateChanged事件,而不是我的外部組件。帶有2個數據源事件處理的JSlider
有什麼辦法可以達到這個目的嗎?
我的框架上有一個JSlider組件,它不斷地被外部組件(媒體播放器隨時設置一個新值)更新。我只想在滑塊處理stateChanged事件,而不是我的外部組件。帶有2個數據源事件處理的JSlider
有什麼辦法可以達到這個目的嗎?
我會實現我自己的BoundedRangeModel,這樣你可以添加額外的標誌,指示是否應該接受更新或實例不
UPDATE
的基本想法是實現自己的模型,這樣當值實際上改變
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);
你唯一的其他選擇是對JSlider
直接延伸本身並重寫setValue
方法以類似的方式
我需要以某種方式禁用「stateChanged」事件時,我從內部組件更新滑塊。有沒有像.NET一樣的處理方法? – 2012-07-25 21:55:14
不在'StateChanged'事件中 – MadProgrammer 2012-07-25 23:24:51
你可能改用'JProgressBar'。 – 2012-07-25 12:08:43