Pergunta

eu tenho um SpinnerNumberModel e alguns ChangeListeners.

Mas os Changelisteners só são notificados quando o número do girador muda. Existe uma maneira de iniciar um evento que se propaga aos Changelisteners, mesmo que o novo número do Spinner seja o mesmo que o valor anterior?

Foi útil?

Solução

O SpinnerNumberModel envia um evento para os ouvintes de alteração registrados exatamente nesses 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)

Em cada um desses métodos, um evento é emitido apenas se o valor passado como o parâmetro realmente difere do valor atual.

No entanto, você pode escrever o seu próprio SpinnerModel (por exemplo, subclassificando SpinnerNumberModel) e dispare todos os eventos que você deseja. Se a sua implementação herda de AbstractSpinnerModel, Como SpinnerNumberModel você terá um prático fireStateChanged Método disponível para envio de eventos:

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

Outras dicas

Thomas me venceu, mas cheguei à mesma conclusão e aqui está o que acabei fazendo:

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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top