String auf Zahlen Überprüfen

Happymaker

Mitglied
Hallo!

hab eine wichtige Frage!

Wie kann ich in Java aus einem JTextField überprüfen ob z.B.
-nur zahlen eingegeben
-nur text eingegeben
-richtiges DatumsFormat

Kann mir da jemand einen Tip geben?

Gruß
Happymaker
 
Tach,
ich finde es einfacher, von vornherein gewisse Eingaben zu unterbinden. Verwende dazu

jTextField.setDocument(...)

Am besten eine eigene Klasse von PlainDocument ableiten und in der

void insertString(int offset, String str, AttributeSet a)

auf die Eingaben reagieren.
 
Hallo!

Für die Überprüfung eines Strings steht dir seit Java 1.4 "public boolean matches(String regex)" aus der Klasse String in Zusammenhang mit regulären Ausdrücken zur Verfügung. http://java.sun.com/j2se/1.4.2/docs/api/java/lang/String.html#matches
Eine andere Möglichkeit wäre das casten auf einen gewünschten Typ z.B. int und auswerten der Exception für den Fall, dass der cast fehlschlägt (public static int parseInt(String s) throws NumberFormatException).

Um nur gewisse Zeichen zuzulassen beschäftige dich genauer mit Snapes Hinweis.

Grüsse TrueSun
 
Hallo!

schau mal hier:

Code:
import java.awt.Container;
import java.awt.GridLayout;

import javax.swing.InputVerifier;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class InputChecker extends JFrame {

	private JTextField txtNumbers, txtLetters;

	public InputChecker() {
		super("InputChecker");
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		Container c = this.getContentPane();
		c.setLayout(new GridLayout(0, 2));

		c.add(new JLabel("Nur Zahlen: "));
		txtNumbers = new JTextField(10);
		txtNumbers.setInputVerifier(new InputVerifier() {
			public boolean verify(JComponent input) {
				String str = ((JTextField) input).getText();
				if (str == null || str.equals(""))
					return true; //Leere Zeichenfolgen werden auch
								 // aktzeptiert...
				return str.matches("[0-9]*"); //Nur Ziffern 0-9
			}
		});
		c.add(txtNumbers);

		c.add(new JLabel("Nur Buchstaben: "));
		txtLetters = new JTextField(10);
		txtLetters.setInputVerifier(new InputVerifier() {
			public boolean verify(JComponent input) {
				String str = ((JTextField) input).getText();
				if (str == null || str.equals(""))
					return true; //Leere Zeichenfolgen werden auch
								 // aktzeptiert...
				return str.matches("[a-zA-Z]*"); //Nur Buchstaben a-z oder A-Z
			}
		});
		c.add(txtLetters);

		pack();
		setVisible(true);

	}

	public static void main(String[] args) {
		new InputChecker();
	}
}

Gruß Tom
 
Danke das geht wunderbar!
Wie kann ich denn das machen dass z.B. auch ein " / " für die telefonnummer erlaubt ist?
Ich kenne mich mit regulären Ausdrücken nicht aus!
Nochmal danke für deine Antwort!

Gruß
Happymaker
 
auch wenns schon ein UUUraltes Thema ist....
ich habe ein ähnliches problem und würde das gern mit einem Cast lösen

ich habe ein JTextfield mit einem KeyEventListener (e)

Wenn der User nun was Tippt möchte ich per Cast prüfen obs ein Int ist.
Wie ich den vorherigen Inhalt des TextFields bekomme weiss ich schon, aber wie
bekomme ich den Aktuellen (also quasi getText()+e.getChar()) ?

lg
Manuel
 
Mit Casten kannst du natürlich nicht prüfen ob es ein Int ist. Die Eingabe ist ja ein String und kein int. Hast du das Beispiel von Tom mal ausprobiert?
 
Das Beispiel von Tom ist mir ehrlich gesagt zu umständlich...

Mit dem Casten kann ich überprüfen obs ein Int ist.
Wenn eine Exception ausgelöst wird wars wohl kein int :-)

Ist es denn nicht möglich bei einem KeyEvent den Vorher/Nachher Wert
abzufragen ?
 
Zurück