JTextField - Eingaben eingrenzen

J

Java_Neuling

Guten Morgen,

ich hätt wieder mal ne Frage und zwar kann man dem JTextField er soll nur ein Zeichen annehmen und das Zeichen soll eine Zahl von 0 bis 9 sein?

MfG
Java Neuling
 
Überprüfe den Text mit

Java:
if (Pattern.matches("^[0-9]{1}", string))
   System.out.println("korrekte Eingabe");
else
   System.out.println("ungültige/zu viele Zeichen");

vll, gibt es auch noch andere Wege (ohne regex) aber das hier geht schnell
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

für die Eingabe von Zahlen, kannst du dem Link von mimij85 folgen. Damit du nur ein Zeichen eingeben kannst, kannst du das so machen.

Code:
JTextField tf = new JTextField(1);

MFG

zEriX
 
Moin!

Damit du nur ein Zeichen eingeben kannst, kannst du das so machen.

Code:
JTextField tf = new JTextField(1);

zEriX


Das funktioniert aber nicht immer. Ich weis es selbst nicht so genau, aber die Anzahl der Spalten hat eher was mit dem Layout zu tun, als mit der Anzahl zulässigen Zeichen..

Ich halte es für das beste, ein eigenes Dokument zu schreiben, welches auch die Anzahl Zeichen begrenzt.
Beispielsweise so:

Code:
import javax.swing.JTextField;

import javax.swing.text.DefaultStyledDocument;

import javax.swing.text.AttributeSet;

import javax.swing.JFrame;

import javax.swing.text.BadLocationException;

public class Main extends JFrame{



   

    public Main() {
      JTextField field = new JTextField();
      field.setColumns(1);
      field.setDocument(new Main.Customdoc(1));
      getContentPane().add(field);
      setSize(50,50);
      setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        
    }
    public class Customdoc extends DefaultStyledDocument{
        private String mask = "0123456789";
        private int maxLength = 0;
        public Customdoc(int max){
            this.maxLength = max;
        }
        
        
        public void insertString(int off, String str, AttributeSet a) throws BadLocationException{
            if(str.length()+getLength() > maxLength)
                return;
            if(mask.indexOf(str)==-1)
                return;
            super.insertString(off,str,a);    
        }
    }

    

   
    public static void main(String[] args){
        Main m = new Main();
        m.setVisible(true);
    }
}

Natürlich könnte man statt der Maske auch den Regex nehmen, den Tobias schon vorgeschlagen hat..

*grüssle*
MeinerEiner
 
Danke für die vielen Tips :)

kann man des mit dem Dokument auch bisschen einfacher schreiben :confused: (oder so das ich es auch verstehen kann, weil ich es gern verstehen würde statt einfach nur einzufügen und zu vergessen...)

02.10.07
Des Ding ist total simpel ( ich lass mich manchmal zu schnell entmutigen... :mad: ) nur eins kann ich halt nicht und zwar seinen code in meinen implementieren
Code:
field.setDocument(new TextFeldBegrenzung.Customdoc(1));
diese Zeile macht mir dabei schwierigkeiten :(

kann mir jemand noch vllt nen tip posten wie ich den am besten in meinen Einfügen kann
 
Zuletzt bearbeitet von einem Moderator:
Zurück