2010-12-09 69 views
0

我有SpinnerNumberModel和一些ChangeListener s。即使數字相同,也會更新SpinnerNumberModel

但是,只有在更改微調器號碼時纔會通知ChangeListeners。有沒有辦法啓動一個傳播到ChangeListeners的事件,即使新的Spinner編號與之前的值相同?

+0

爲什麼你會在沒有發生變化時調用變更監聽器? – Thomas 2010-12-09 16:50:43

+0

由於其他事件我無法訪問,所以模型可能會與「現實」不同步,並且我想重新初始化模型並確保發生下游操作。 (實際上有一個NaN狀態,我不能使用,因爲SpinnerNumberModel不支持它,但我無法檢測到它,直到下一個非NaN狀態發生。) – 2010-12-09 16:53:43

回答

3

SpinnerNumberModel的將事件發送到已註冊更改偵聽以完全相同這些方法:

1. public void setValue(Object value) 
2. public void setStepSize(Number stepSize) 
3. public void setMaximum(Comparable maximum) 
4. public void setMinimum(Comparable minimum) 

在上述每種方法中,事件僅發出IFF傳遞作爲參數實際上是從當前值不同的值。

但是,您可以編寫自己的SpinnerModel(例如通過繼承SpinnerNumberModel)並激發您想要的所有事件。如果您實現從AbstractSpinnerModel繼承,如SpinnerNumberModel做,你必須提供一個方便的fireStateChanged方法發送事件:

http://download.oracle.com/javase/6/docs/api/javax/swing/AbstractSpinnerModel.html#fireStateChanged()

1

托馬斯打我,但我得出了同樣的結論,這是我結束了:

private static class SpinnerNumberModel2 extends SpinnerNumberModel 
{ 
    public SpinnerNumberModel2(int value, int minimum, int maximum, int stepSize) 
    { 
     super(value,minimum,maximum,stepSize); 
    } 
    public void fireUpdate() { super.fireStateChanged(); } 
} 
相關問題