causando cambios a SpinnerNumberModel incluso si el número es el mismo
-
25-09-2019 - |
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?
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:
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(); }
}