JSpinner welche Taste?

BlubBlub

Bekanntes Mitglied
Hi,

ich verwende einen JSpinner und habe dort einen ChangeListener registriert.
Wie kann ich in der stateChanged(ChangeEvent ce) Methode herausfinden
ob der Benutzer die obere oder die untere Pfeiltaste des Spinners gedrückt hat?
 
Du speicherst das letzte Element und vergleichst?
Aber ich würde davon abraten. Da das Modell des Spinners austauschbar sein soll, würde ich immer nur den aktuellen Wert bearbeiten, nicht welche Taste gedrückt wurde.
 
Aber ich würde davon abraten. Da das Modell des Spinners austauschbar sein soll, würde ich immer nur den aktuellen Wert bearbeiten, nicht welche Taste gedrückt wurde.

Nagut aber es wird wohl kein Weg dran vorbeiführen.
In meinem JSpinner habe ich Zahlen von 1 bis 100 gespeichert.
Es sind Situationsabhängig aber nur bestimmte Zahlen davon zulässig.
(Welche Zahlen zulässig sind und welche nicht kann sich dynamisch ändern, also
kann ich nicht von vornerein sagen welche Zahl erlaubt ist.)
Angenommen die Zahlen 18, 19 und 21, 22 sind nicht zulässig und der aktuelle Wert liegt bei 20.
Wenn der Benutzer nun den oberen Button betätigt so soll der JSpinner auf den Wert 23 springen.
Drück der Benutzer hingegen den unteren Button so soll der JSpinner auf den Wert 17 springen.

Innerhalb des StateChangeListener schaue ich mir also den Wert an. Ist der Wert nicht zulässig so erhöht er diesen Wert in einer for Schleife um 1 (falls der obere arrowButton gedrückt wurde). Ist dieser neue Wert auch nicht zulässig erhöht er ihn wiederum um 1. Ist der Wert zulässig so wird dieser Wert mit setValue im Spinner angezeigt.
Wurde der untere arrowButton gedrückt wird nicht um 1 erhöht sondern immer um 1 erniedrigt.
Dies ist also der Grund weshalb ich wissen muss ob der User den oberen oder unteren arrowButton gedrückt hat.
 
In diesen Fall würde ich dir dringend raten ein eigenes Model zu schreiben. Eventuell von SpinnerNumberModel oder NumberSpinnerModel (weiß grad nicht, falls zulässig) ableiten, das besitzt eine Methode die beim Tastendruck mit einer Int als Parameter aufgerufen wird.
 
Imo ist der ChangeListener der falsche Ort um so eine validierung zu machen. Entweder du hängst einen InputVerifier an deinen Spinner (der würde aber glaube ich dann keine Änderung zulassen) oder du überschreibst im Model deines Spinners die getNextValue und getPreviousValue Methoden.
 
So habe jetzt ein eigenes Model dafür geschrieben welches vom SpinnerNumberModel abgeleitet wird.
Dort habe ich die beiden Methoden getPreviousValue() und getNextValue() angepasst.
Danke für die Tipps
 

Zurück
Oben