2006年12月12日 星期二

JSlider的ChangeListener自high問題

  所謂的JSlider ChangeListener自high問題,指的是在監控javax.swing.JSlider的刻度的時候,要使用JSlider.addChangeListener(ChangeListener cl)加入並且實作一個ChangeListener聆聽event,每次有事情發生的時候,就會自動呼叫JSlider.stateChanged(ChangeEvent ce),比如:

public void stateChanged(ChangeEvent ce) {
if(ce.getSource() == this.xSlider) {
this.procedureToProcessXSlider();
}
}

  但是如果這個procedureToProcessXSlider()裡面有幾百行怎麼辦?每拉動一個刻度都會發出event哦,如果把JSlider從75拉到174,這樣就會發出100次event,莫名其妙就執行了幾萬行程式碼,正式的解法我還沒有去網路上找過,不過我自己是這樣解的:

public void stateChanged(ChangeEvent ce) {
if(ce.getSource() == this.xSlider) {
if(!this.xSlider.getValueIsAdjusting()) {
this.procedureToProcessXSlider();
}
}
}


沒有留言: