Weitere aktuelle Java-Titel finden Sie bei dpunkt.
 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index


8.6.12

JTextField



Abbildung 8.45: JTextField
Abbildung 8.45

Ein JTextField ist die einfachste Textkomponente in Swing. Es zeigt einen unformatierten, einzeiligen Text an, wobei ein Druck der Eingabetaste einen javax.swing.event.ActionEvent auslöst.

Vor der Version 1.4, wo das JFormattedTextField diese Aufgabe übernahm, kann man das Standarddokument ersetzen, um die Eingabe einzuschränken. Üblicherweise reicht es, dort die Methode

  public void insertString(int, String, AttributeSet)

zu überschreiben. Möchte man beispielsweise die Eingabe von bestimmten Zeichenketten verhindern, so wird in der Methode überprüft, ob das neu angegebene Zeichen zur Menge der verbotenen Buchstaben gehört. Ist dies der Fall, wird die super-Methode nicht aufgerufen, um das neue Zeichen nicht ins Dokument aufzunehmen. Im anderen Fall wird durch Aufruf der super-Methode das Dokument geändert. Über diesen Mechanismus ist natürlich auch leicht eine Modifizierung des Eingabetextes (beispielsweise die Umwandlung von Klein- zu Großbuchstaben) möglich.

Ein typisches Beispiel ist, Datumseingaben bereits beim Eingeben auf Gültigkeit zu überprüfen.

Seit Java [1.4]1.4 kann man dafür das JFormattedTextField mit einem MaskFormatter benutzen.

Das folgende Beispiel zeigt eine Unterklasse von Document, bei dem die Eingabe auf gültige Datumsfelder der Form TT.MM.JJJJ überprüft wird. Ein entsprechendes JTextField kann dabei mittels
  JTextField textField = new JTextField(new DateDocument());
erzeugt werden.
  class DateDocument extends PlainDocument {
  
  public void insertString(int offs, String str,
                           AttributeSet a)
                           throws BadLocationException {
  
     // Eine andere Lösungsvariante wäre die Verwendung
     // von JRegex (jregex.sourceforge.net), bei dem
     // man mit Regular Expression (Incomplete matching)
     // den gleichen Effekt erzielen kann
  
     // Überprüfen, ob nur Zahlen und Punkte eingegeben
     for (int i = 0; i < str.length(); i++) {
         char c = str.charAt(i);
         if (c != '.' && (c < '0' || c > '9'))
            return;
         }
     String text = getText(0, getLength())+str;
  
      // 1. Stelle Tag
      if (text.length () > 0)
         if (Integer.parseInt(text.substring(0, 1)) == 0 ||
             Integer.parseInt(text.substring(0, 1)) > 3)
            return;
     // Tag
     if (text.length () >= 2) {
        int date = Integer.parseInt(text.substring(0, 2));
        if (date < 1 || date > 31)
           return;
        }
     // Zweiter .
     if (text.length() >= 3)
        if (text.charAt(2) != '.')
           return;
     // 1. Stelle Monat
     if (text.length() >= 4)
        if (text.charAt(3) != '0' &&
           text.charAt(3) != '1')
           return;
     // Monat
     if (text.length() >= 5) {
        int month = Integer.parseInt(text.substring(3, 5));
        if (month == 0 || month > 12)
           return;
        }
    // Dritter .
    if (text.length() >= 6)
        if (text.charAt(5) != '.')
           return;
    // Maximale Länge
    if (text.length() > 10)
       return;
    // Punkte einbauen
    if (text.length() == 2 || text.length() == 5)
       str += ".";
  
    // Wenn die Eingabe korrekt ist,
    // kann die super-Methode aufgerufen werden
    super.insertString(offs, str, a);
    }
  }

Material zum Beispiel

Beispiel

  JTextField f = new JTextField("Geben Sie hier Text ein");


 Inhaltsverzeichnis   Auf Ebene Zurück   Seite Zurück   Seite Vor   Auf Ebene Vor   Eine Ebene höher   Index

Copyright © 2002 dpunkt.Verlag, Heidelberg. Alle Rechte vorbehalten.