Pregunta

Tengo un SpinnerNumberModel y algunos ChangeListener s.

Pero los ChangeListeners solamente ser notificado cuando los cambios de número de ruleta. ¿Hay una manera de iniciar un evento que se propaga a los ChangeListeners incluso si el nuevo número de ruleta es el mismo que el valor anterior?

¿Fue útil?

Solución

SpinnerNumberModel envía un evento para los oyentes de cambio registrados en exactamente estos métodos:

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

En cada uno de estos métodos, un evento sólo se emite si y sólo si el valor pasado como parámetro en realidad difiere del valor actual.

Sin embargo, se podría escribir su propio SpinnerModel (por ejemplo, mediante la subclasificación SpinnerNumberModel) y despedir a todos los eventos que desee. Si sus hereda de implementación de AbstractSpinnerModel, como SpinnerNumberModel hace, tendrá un método fireStateChanged útil disponible para el envío de eventos:

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

Otros consejos

Thomas se me adelantó, pero llegó a la misma conclusión y esto es lo que terminé haciendo:

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(); }
}   
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top