JSpinner: Editieren einschränken

Snape

Erfahrenes Mitglied
Moin,
ich finde das einfach nicht:
Wie kann ich einen Zähler (JSpinner) so einrichten, dass er im Zahlenfeld nur Zahlen direkt bei der Eingabe akzeptiert und trotzdem mit den Pfeil-oben / Pfeil-unten mit dem eingetragenen Wert fortsetzt?
 
Hallo Snape,

mir fallen jetzt spontan zwei Alternativen ein, je nach dem wie es genau funktionieren soll.

Wunsch: JSpinner soll auf Zahlen so reagieren wie die Kombination aus JFormattedTextField und beispielsweise DecimalFormat, d.h. ich kann "Nicht-Zahlen" eintragen, jedoch behält das Textfeld seinen vorherigen gültigen Wert. Erst wenn der JSpinner seinen Fokus verliert wird die Eingabe überprüft und eventuell korrigiert.

Dann genügt die Verwendung von SpinnerNumberModel.

Wunsch: Wenn aber "Nicht-Zahlen" schon beim tippen nicht übernommen werden sollen sieht das folgendermaßen aus.

Ein JTextField oder ein JFormattedTextField mit einem Listener kombinieren welcher beim Eintippen die Eingabe überprüft und nur Zahlen zulässt und diesen dann mit der Methode setEditor von der Klasse JSpinner meiner JSpinner Instanz übergeben. Die Verwendung des ChangeListeners vom Spinnermodel wäre vielleicht auch eine Möglichkeit.

Schau auch mal hier:
Java Insel
Java Almanac
Java Almanac2

VG Erdal
 
>Hallo Snape,
>Wunsch: Wenn aber "Nicht-Zahlen" schon beim tippen nicht übernommen werden sollen sieht das folgendermaßen aus.

>Ein JTextField oder ein JFormattedTextField mit einem Listener kombinieren welcher beim Eintippen die Eingabe überprüft und nur Zahlen zulässt und diesen dann mit der Methode setEditor von der Klasse JSpinner meiner JSpinner Instanz übergeben. Die Verwendung des ChangeListeners vom Spinnermodel wäre vielleicht auch eine Möglichkeit.

Ein paar Variationen davon habe ich schon erfolglos ausprobiert, deshalb meine Frage.

>Schau auch mal hier:
Java Insel

Das ist nicht das, was ich suche.

>Java Almanac

Das auch nicht, aber ich denke, für einfache Zwecke reicht mir ein Link von der o.a. Seite: Textfeld im Spinner deaktivieren
Ich belasse es erst einmal dabei, das Editieren des Textfeldes auszuschalten. Falls jemand (Tom? *g*) das mit der direkten Eingabe auch noch lösen sollte, bin ich ganz Ohr.

>VG Erdal

Danke erst mal!
 
Hallo Snape,

habe es vor Tom :) realisiert. Beziehungsweise von irgendwo abgekupfert, das weiß aber niemand.

Schau mal hier:

Code:
import java.awt.GridLayout;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import javax.swing.JFrame;
import javax.swing.JSpinner;
import javax.swing.SpinnerNumberModel;

public class Number_Spinner {

	public void example() {

		SpinnerNumberModel model = new SpinnerNumberModel(12, 1, 150, 1);
		JSpinner ns = new JSpinner(model);

		((JSpinner.DefaultEditor) ns.getEditor()).getTextField()
				.addKeyListener(new KeyAdapter() {
					public void keyTyped(KeyEvent e) {
						if (Character.isLetter(e.getKeyChar()))
							e.consume();
					}
				});

		JFrame f = new JFrame();

		f.setAlwaysOnTop(true);
		f.setSize(200, 150);
		f.setLayout(new GridLayout(1, 1));
		f.add(ns);
		f.setVisible(true);

	}

	public static void main(String[] args) {
		Number_Spinner spin = new Number_Spinner();
		spin.example();
	}

}

VG Erdal
 
Zurück