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?

È stato utile?

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:

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

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(); }
}   
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top