JSpinner Enter

BlubBlub

Bekanntes Mitglied
Hi ich habe zwei JSpinner.
Beide JSpinner sind auf setEditable(false) gesetzt.
Nun möchte ich dass der Benutzer einen Wert mit dem JSpinner auswählt und sobald
der Benutzer Enter drückt soll der Wert den der JSpinner zeigt ausgegeben werden.

Ich möchte keinen ChangeListener verwenden, da ich will, dass der Benutzer eine bestimmte Auswahl treffen kann und diese mit Enter bestätigen soll.

Dadurch, dass ich aber setEditable(false) gesetzt habe funktioniert der ActionListener nicht.

Ein Keylistner ist auch keine gute Lösung, da ich will, dass nur der JSpinner ein Ereignis auslöst, mit dem sich der Benutzer grad auseinander setzt und nicht beide.
 
...
Beide JSpinner sind auf setEditable(false) gesetzt.
...
Nun möchte ich dass der Benutzer einen Wert mit dem JSpinner auswählt
...

Ehm?! Ich ziehe die Handbremse an will aber fahren?!

Entweder soll der Benutzer eine Eingabe machen können ==> setEditable = true
Oder der Benutzer soll keine Eingabe machen können ==> setEditable = false

Es geht nur eins von beidem. Vielleicht wäre ein im Wertebereich beschränktes NumberModel (Mit dem Spinner) oder eine JComboBox eher was du suchst?
 
Vielleicht wäre ein im Wertebereich beschränktes NumberModel (Mit dem Spinner) oder eine JComboBox eher was du suchst

Eine JComboBox verwende ich bereits. Aber der Benutzer soll alternativ auch einen JSpinner verwenden
können.

Das Problem beim dem beschränkten NumberModel ist, dass ich keine Zahlen, sondern Strings verwende, wie "An", "Aus", "Grünes Licht" etc.

Nagut, aber selbst wenn ich setEditable auf true setze dann habe ich immer noch das Problem, dass der
ActionListener erst reagiert, wenn ich in den Eingabebereich irgendwas eingegeben habe und dann Enter drücke. Das heißt wähle ich mit dem JSpinner einen Wert aus kann ich nicht sofort auf Enter drücken sondern muss zum Beispiel noch ein Leerzeichen oder eine sonstige Eingabe zunächst vornehmen.
 
Wie jetzt ComboBox oder Spinner?

Wenn JSpinner, wie addest du dem dann einen ActionListener??? Ein Spinner sollte ChangeEvents werfen, wenn er sich ändert -> ChangeListener.

Das Problem beim dem beschränkten NumberModel ist, dass ich keine Zahlen, sondern Strings verwende, wie "An", "Aus", "Grünes Licht" etc.

Dann nimmst du eben kein NumberModel sondern ein normales SpinnerListModel, bzw. gibst du deinem Spinner beim erzeugen einfach ein String array in den Konstruktor.
 
Ja aber wenn ein JSpinner einen KeyListener erhält, dann wird der KeyListener jedes mal beim Drücken der Entertaste ausgeführt. Ich möchte aber, dass nur derjenige JSpinner auf die Entertaste reagiert, der grad in Verwendung ist.
Das problem ist also dass alle KeyListener darüber informiert werden, dass die Entertaste gedruckt wurde und nciht einfach nur der KeyListener von dem JSpinner bei dem der Benutzer eine Auswahl getroffen hat.
 
Das glaube ich nicht. Ein KeyListener wird immer nur von den Komponenten abgefeuert, der den Focus hat. Wobei Enter nur bei einen editierbaren Spinner Sinn machen würde, der den Focus hat (JTextField z. B.)
Bei einen Spinner der nicht im Editor schaltet würde doch niemand Enter drücken, das wäre doch anwenderspezifisch falsch, oder? ???:L
 
Das problem ist also dass alle KeyListener darüber informiert werden, dass die Entertaste gedruckt wurde und nciht einfach nur der KeyListener von dem JSpinner bei dem der Benutzer eine Auswahl getroffen hat.

Hallo BlubBlub,

deine Aussage ist ganz einfach falsch.
Wenn wir zum Beispiel "keyListener1" an "spinner1" hängen und "keyListener2" an "spinner2", dann hört jeder der beiden Listener nur auf "seinen" Spinner. Sogar wenn wir denselben KeyListener an beide Spinner hängen würden, könnten wir die Quelle des KeyEvents (also spinner1 oder spinner2) über die Methode "getSource()" herausfinden:
Java:
@Override
public void keyReleased(final KeyEvent evt) {
    if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
        if (SwingUtilities.getAncestorOfClass(JSpinner.class, (Component) evt.getSource()) == spinner1) {
            //Enter pressed for spinner1
        } else {
            //Enter pressed for spinner2
        }
    }
}

Gruß,
André
 
Zuletzt bearbeitet:

Zurück
Oben