即使数字相同,也会导致SpinnerNumberModel更新

时间:2010-12-09 16:49:07

标签: java model-view-controller swing changelistener

我有一个SpinnerNumberModel和一些ChangeListener s。

但只有微调器编号更改时才会通知ChangeListeners。有没有办法启动传播到ChangeListeners的事件,即使新的微调器号与前一个值相同?

2 个答案:

答案 0 :(得分: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)

在每种方法中,只有当参数传递的值实际上与当前值不同时才会发出事件。

但是,您可以编写自己的SpinnerModel(例如,通过继承SpinnerNumberModel)并触发所需的所有事件。如果您的实施继承自AbstractSpinnerModelSpinnerNumberModel,则可以使用方便的fireStateChanged方法发送事件:

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

答案 1 :(得分: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(); }
}