8.6.8 | JSpinner |
Neu in der Version
1.4 ist der JSpinner, typischerweise eine Komponente, die neben einem Eingabefeld zwei Buttons zum Erhöhen bzw. Erniedrigen des eingegebenen Wertes erlaubt.
JSpinner unterstützt von sich aus drei Models, die dabei die passenden Editoren mit setzt: SpinnerNumberModel für Zahlen, SpinnerDateModel für Datumsangaben und SpinnerListModel für eine Liste von beliebigen Daten. Die Editorkomponente ist in diesen Fällen ein JTextField, die mit dem entsprechenden Wert gefüllt wird.
Definiert wird das Model durch die Klasse SpinnerModel, welches neben dem aktuellen Wert den nächsten bzw. den vorherigen liefert.
Bei Swing sind drei Models vorgegeben, die allesamt von AbstractSpinnerModel abgeleitet sind.
- SpinnerNumberModel
Um Zahlen zu editieren, kann dieses Model verwendet werden. Neben den schon von sich aus unterstützten Datentypen int und double können beliebige andere Nummern eingebunden werden, die von java.lang.Number abgeleitet sind.new JSpinner( new SpinnerNumberModel(10, 0, 100, 1));- SpinnerDateModel
Durch die Verwendung dieses Models kann der Benutzer ein Datum einstellen. Neben dem zu editierenden Wert, dem Minimum und dem Maximum kann noch das Feld angegeben werden, welches durch die Knöpfe verändert werden kann (also bedeutet dies bei Angabe von java.util.Calendar.DATE, dass der Wert in einem Tagesrhythmus erhöht bzw. erniedrigt werden kann).long now = (new Date()).getTime(); // Spinner von jetzt +/- einem Jahr // und einer Veränderung von einem // Tag beim Scrollen long tagMillis = 24*60*60*1000; new JSpinner(new SpinnerDateModel( new Date(now), new Date(now-tagMillis*356), new Date(now+tagMillis*356), Calendar.DATE);- SpinnerListModel
Für beliebige Listen von Werten ist dieses Model gedacht. Der Programmierer gibt hier lediglich seine Liste von Werten an.new JSpinner(new SpinnerListModel( new Object[] {"Kirschen", "Äpfel", "Birnen"})));
Passend zu den vordefinierten Models gibt es drei Editoren, die allesamt von JSpinner.DefaultEditor abgeleitet sind und automatisch beim Einstellen des Models gesetzt werden. Die Editierkomponente ist in den drei Fällen ein JFormatedTextField:
- JSpinner.NumberEditor
Dieser Editor dient dazu, Nummern zu editieren. Das Dezimalformat kann gemäß den Konventionen der Klasse java.text.DecimalFormat angegeben werden.- JSpinner.DateEditor
Beim DateEditor kann man einen String übergeben, der gemäß den Konventionen von java.text.SimpleDateFormat das Datum in einer einstellbaren Art und Weise darstellt.- JSpinner.ListEditor
Der ListEditor stellt den Wert eines List-Elementes mithilfe der Object.toString()-Methode dar.
// Hier soll das Geburtsdatum von Personen >= 18 Jahre // abgefragt werden // Wir gehen von einem Standard-Alter von 50 Jahren aus final Calendar standardWert = Calendar.getInstance(); standardWert.add(Calendar.YEAR, -50); // Der älteste Mensch darf 120 Jahre alt sein final Calendar von = Calendar.getInstance(); von.add(Calendar.YEAR, -120); // Eine Person darf nicht unter 18 Jahre alt sein final Calendar bis = Calendar.getInstance(); bis.add(Calendar.YEAR, -18); // Spinner, mit standardWert als Startwert; // Geburtsdatum zwischen jetzt minus 120 und 18 Jahren; // beim Druck auf die Pfeil-Buttons wird ein Jahr // addiert bzw. subtrahiert javax.swing.JSpinner spinner = new javax.swing.JSpinner( // Konstuktor mit // dem aktuellen Zeitpunkt, // dem minimalen Wert, // dem maximalen Wert und // den Wert für die Addition bzw. Subtraktion new SpinnerDateModel(standardWert.getTime(), von.getTime(), bis.getTime(), Calendar.YEAR)); spinner.setEditor(new javax.swing.JSpinner.DateEditor( spinner, "dd.MM.yyyy"));