2012-07-25 26 views
0

我的框架上有一個JSlider組件,它不斷地被外部組件(媒體播放器隨時設置一個新值)更新。我只想在滑塊處理stateChanged事件,而不是我的外部組件。帶有2個數據源事件處理的JSlider

有什麼辦法可以達到這個目的嗎?

+2

你可能改用'JProgressBar'。 – 2012-07-25 12:08:43

回答

1

我會實現我自己的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方法以類似的方式

+0

我需要以某種方式禁用「stateChanged」事件時,我從內部組件更新滑塊。有沒有像.NET一樣的處理方法? – 2012-07-25 21:55:14

+0

不在'StateChanged'事件中 – MadProgrammer 2012-07-25 23:24:51