causando aggiornamenti SpinnerNumberModel anche se il numero è lo stesso
-
25-09-2019 - |
Domanda
Ho un SpinnerNumberModel
e alcuni ChangeListener
s.
Ma i ChangeListeners solo per sapere quando i cambiamenti numero filatore. C'è un modo per avviare un evento che si propaga ai ChangeListeners anche se il nuovo numero filatore è uguale al valore precedente?
Soluzione
SpinnerNumberModel invia un evento per gli ascoltatori di cambio iscritti nel esattamente questi metodi:
1. public void setValue(Object value)
2. public void setStepSize(Number stepSize)
3. public void setMaximum(Comparable maximum)
4. public void setMinimum(Comparable minimum)
In ciascuno di questi metodi, un evento viene rilasciato solo se e solo se il valore passato come parametro effettivamente differisce dal valore corrente.
Tuttavia, si potrebbe scrivere il proprio SpinnerModel
(per esempio mediante sottoclassi SpinnerNumberModel
) e fuoco tutti gli eventi che si desidera. Se i vostri eredita implementazione da AbstractSpinnerModel
, come SpinnerNumberModel
fa, avrete a portata di mano un metodo fireStateChanged
disponibili per l'invio di eventi:
Altri suggerimenti
Thomas mi ha battuto ad esso, ma sono arrivato alla stessa conclusione ed ecco cosa ho finito per fare:
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(); }
}