causando atualizações ao spinnerNumberModel, mesmo que o número seja o mesmo
-
25-09-2019 - |
Pergunta
eu tenho um SpinnerNumberModel
e alguns ChangeListener
s.
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?
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:
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(); }
}