Textänderung in JSpinner - wie abfragen?
-
Hallo,
wie bekommt man raus, dass in einem JSpinner der Text durch den Benutzer geändert wurde? Mit ChangeListener kann man auf das Anklicken der Pfeile reagieren. Aber wie erhält man eine Nachricht, wenn der Text im TextFeld über die Tastatur geändert wurde? Muss man da einen Listener auf das TextFeld registrieren? Und wenn ja, wie kommt man an das TextFeld und welcher Listener ist der richtige?
Gruß Flo
-
Der ChangeEvent wird auch geworfen, wenn man den Wert des Spinners über Tastatur eingibt und mit Return bestätigt. Siehe Beispiel:
public class JSpinnerTest extends javax.swing.JFrame implements javax.swing.event.ChangeListener { public JSpinnerTest() { super("JSpinnerTest"); this.setSize(300,200); javax.swing.JSpinner spinner = new javax.swing.JSpinner(); spinner.addChangeListener(this); this.getContentPane().add(spinner); this.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE); } public static void main (String args[]) { new JSpinnerTest().show(); } public void stateChanged(javax.swing.event.ChangeEvent evt) { System.out.println("ChangeEvent"); javax.swing.JSpinner dummy = (javax.swing.JSpinner)evt.getSource(); System.out.println("Value = "+dummy.getValue()); } }
-
Vielen Dank für Deine Antwort, aber bist Du sicher mit dem ChangeListener?
Bei mir passiert nichts, wenn ich einen Eintrag abändere und dann Return drücke. Die ChangeEvent-Message wird lediglich ausgegeben, wenn man an den Pfeilen rumfummelt...Gruß Flo
-
Ja ich bin mir sicher. Habs doch mit dem obigen Code probiert?
-
Stimmt, in Deinem Beispiel funktioniert's. Das liegt offenbar daran, dass noch keine Werte in den Spinner eingetragen sind.
In meinem stehen ja bereits einige Werte drin, verwende dazu ein Modelspinner.setModel(new SpinnerListModel(new Object[] {"wort1","wort2","wort3"}));
welches man dann wohl auch für die Änderungen bemühen muss.
-
Na ja ... wenn du eine vorbelegte Liste übergibst ist schon klar, warum er bei textuellen Änderungen kein Event wirft. Schließlich gibst du ihm ja nur n Freiheiten zur Auswahl. Wie du schon sagtest müsste man bei einem neuen Text das Model entsprechend aktualisieren ... aber das liegt wohl nicht in deinem Sinne? Des weiteren würde ich mir überlegen, ob für meinen Anwendungsfall (vorbelegte Liste im Spinner) nicht doch eine Liste oder Dropdownbox besser geeignet wäre. Zumal man sich oft für einen Spinner entscheidet, um Zahlenwerte zu erhöhen oder zu erniedrigen.