Nur Zahlen in Textfeld eingeben: Unterschied zwischen den Versionen
(→Setzen eines Documents) |
K (→Nur Buchstaben erlauben) |
||
(15 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 1: | Zeile 1: | ||
− | Oft | + | =Einleitung= |
+ | Oft wird gefragt, wie man vom Benutzer nur Zahlen in Textfeldern eingeben lassen kann. Benutzereingaben in Textfelder sollen also von vorn herein nur auf Zahlen eingeschränkt werden. | ||
+ | |||
+ | Folgender Artikel wird Beispiele für verschiedene Lösungsansätze liefern. | ||
=Setzen eines Documents= | =Setzen eines Documents= | ||
Damit ein Textfeld ({{JAPI|JTextField}}, {{JAPI|JTextArea}} etc.) ein gewünschtes/verändertes Verhalten annehmen kann, genügt es, ein passendes {{JAPI|javax.swing.text.Document}} zu übergeben. | Damit ein Textfeld ({{JAPI|JTextField}}, {{JAPI|JTextArea}} etc.) ein gewünschtes/verändertes Verhalten annehmen kann, genügt es, ein passendes {{JAPI|javax.swing.text.Document}} zu übergeben. | ||
− | < | + | <syntaxhighlight lang="java"> |
textField.setDocument(new IntegerDoucument()); | textField.setDocument(new IntegerDoucument()); | ||
− | </ | + | </syntaxhighlight> |
In obigem Beispiel wird bspw. einem JTextField das folgende Document übergeben, so dass das Textfeld nur noch ganze Zahlen als Eingabe akzepziert. | In obigem Beispiel wird bspw. einem JTextField das folgende Document übergeben, so dass das Textfeld nur noch ganze Zahlen als Eingabe akzepziert. | ||
Zeile 11: | Zeile 14: | ||
=Nur Integer-Werte erlauben= | =Nur Integer-Werte erlauben= | ||
Dazu leiten wir ein Objekt vom Typ {{JAPI|PlainDocument}} ab und erweitern es so, dass es nur noch ganze Zahlen akzeptiert: | Dazu leiten wir ein Objekt vom Typ {{JAPI|PlainDocument}} ab und erweitern es so, dass es nur noch ganze Zahlen akzeptiert: | ||
− | < | + | <syntaxhighlight lang="java"> |
class IntegerDocument extends PlainDocument { | class IntegerDocument extends PlainDocument { | ||
@Override | @Override | ||
public void insertString(int offset, String s, AttributeSet attributeSet) throws BadLocationException { | public void insertString(int offset, String s, AttributeSet attributeSet) throws BadLocationException { | ||
− | if (s.matches(" | + | if (s.matches("\\d+")) { |
super.insertString(offset, s, attributeSet); | super.insertString(offset, s, attributeSet); | ||
} else { | } else { | ||
Zeile 23: | Zeile 26: | ||
} | } | ||
} | } | ||
− | </ | + | </syntaxhighlight> |
+ | Ein Textfeld, dem dieses IntegerDocument übergeben wurde, wird nur noch positive Integer-Werte bei der Eingabe akzeptieren. | ||
+ | |||
+ | ==Beschränken der Länge der einzugebenen Zahl== | ||
+ | <syntaxhighlight lang="java"> | ||
+ | class LimitDocument extends PlainDocument { | ||
+ | |||
+ | private final JTextField tf; | ||
+ | private final int MAX_LENGTH; | ||
+ | |||
+ | LimitDocument(final JTextField tf, final int maxLength) { | ||
+ | this.tf = tf; | ||
+ | this.MAX_LENGTH = maxLength; | ||
+ | } | ||
+ | |||
+ | @Override | ||
+ | public void insertString(int offset, String s, AttributeSet attributeSet) throws BadLocationException { | ||
+ | if (tf.getText().trim().length() < MAX_LENGTH && s.matches("\\d+")) { | ||
+ | super.insertString(offset, s, attributeSet); | ||
+ | } else { | ||
+ | Toolkit.getDefaultToolkit().beep(); //Limit erreicht | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | =Nur Buchstaben erlauben= | ||
+ | Um nur Buchstaben eingeben zu lassen muss lediglich das Regex-Muster angepasst werden. Das Muster, das keine Zahlen erlaubt, lautet in Java '''"\\D+"'''. | ||
+ | |||
+ | {{Fragen stellen}} | ||
− | [[Kategorie:Java]] | + | [[Kategorie:Tutorials (Java)]] |
[[Kategorie:Java-Codeschnipsel]] | [[Kategorie:Java-Codeschnipsel]] |
Aktuelle Version vom 3. Februar 2022, 12:05 Uhr
Inhaltsverzeichnis
Einleitung
Oft wird gefragt, wie man vom Benutzer nur Zahlen in Textfeldern eingeben lassen kann. Benutzereingaben in Textfelder sollen also von vorn herein nur auf Zahlen eingeschränkt werden.
Folgender Artikel wird Beispiele für verschiedene Lösungsansätze liefern.
Setzen eines Documents
Damit ein Textfeld (JTextField
, JTextArea
etc.) ein gewünschtes/verändertes Verhalten annehmen kann, genügt es, ein passendes javax.swing.text.Document
zu übergeben.
textField.setDocument(new IntegerDoucument());
In obigem Beispiel wird bspw. einem JTextField das folgende Document übergeben, so dass das Textfeld nur noch ganze Zahlen als Eingabe akzepziert.
Nur Integer-Werte erlauben
Dazu leiten wir ein Objekt vom Typ PlainDocument
ab und erweitern es so, dass es nur noch ganze Zahlen akzeptiert:
class IntegerDocument extends PlainDocument {
@Override
public void insertString(int offset, String s, AttributeSet attributeSet) throws BadLocationException {
if (s.matches("\\d+")) {
super.insertString(offset, s, attributeSet);
} else {
Toolkit.getDefaultToolkit().beep(); //keine Ziffer eingegeben
}
}
}
Ein Textfeld, dem dieses IntegerDocument übergeben wurde, wird nur noch positive Integer-Werte bei der Eingabe akzeptieren.
Beschränken der Länge der einzugebenen Zahl
class LimitDocument extends PlainDocument {
private final JTextField tf;
private final int MAX_LENGTH;
LimitDocument(final JTextField tf, final int maxLength) {
this.tf = tf;
this.MAX_LENGTH = maxLength;
}
@Override
public void insertString(int offset, String s, AttributeSet attributeSet) throws BadLocationException {
if (tf.getText().trim().length() < MAX_LENGTH && s.matches("\\d+")) {
super.insertString(offset, s, attributeSet);
} else {
Toolkit.getDefaultToolkit().beep(); //Limit erreicht
}
}
}
Nur Buchstaben erlauben
Um nur Buchstaben eingeben zu lassen muss lediglich das Regex-Muster angepasst werden. Das Muster, das keine Zahlen erlaubt, lautet in Java "\\D+".
Fragen
Das Thema wurde nicht ausreichend behandelt? Du hast Fragen dazu und brauchst weitere Informationen? Lass Dir von uns helfen!
- Besuche uns im Byte-Welt-Forum
- Besuche unseren Chat
Wir helfen dir gerne!
Dir hat dieser Artikel gefallen? Oder Du hast Fehler entdeckt und möchtest zur Berichtigung beitragen? Prima! Schreibe einen Kommentar!
Du musst angemeldet sein, um einen Kommentar abzugeben.