我有SpinnerNumberModel
和一些ChangeListener
s。即使數字相同,也會更新SpinnerNumberModel
但是,只有在更改微調器號碼時纔會通知ChangeListeners。有沒有辦法啓動一個傳播到ChangeListeners的事件,即使新的Spinner編號與之前的值相同?
我有SpinnerNumberModel
和一些ChangeListener
s。即使數字相同,也會更新SpinnerNumberModel
但是,只有在更改微調器號碼時纔會通知ChangeListeners。有沒有辦法啓動一個傳播到ChangeListeners的事件,即使新的Spinner編號與之前的值相同?
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
方法發送事件:
托馬斯打我,但我得出了同樣的結論,這是我結束了:
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(); }
}
爲什麼你會在沒有發生變化時調用變更監聽器? – Thomas 2010-12-09 16:50:43
由於其他事件我無法訪問,所以模型可能會與「現實」不同步,並且我想重新初始化模型並確保發生下游操作。 (實際上有一個NaN狀態,我不能使用,因爲SpinnerNumberModel不支持它,但我無法檢測到它,直到下一個非NaN狀態發生。) – 2010-12-09 16:53:43