Textfeld für die Eingabe von Zahlen

Mit einem NumberFormatter lässt sich ein TextFeld so formatieren, dass nur Zahlen als Eingabe akzeptiert werden. Die Grundlage hierfür bildet ein JFormattedTextField.

Das Beispiel zeigt eine von JFrame abgeleitete Klasse, in deren Konstruktor der Einfachheit halber die Deklaration und entsprechende Einrichtung des Textfeldes stattfinden. Das Textfeld selbst muss vom Typ JFormattedTextField sein. Die Klasse unterstützt die Darstellung formatierter Inhalte. So gibt es z.B. u.a. die Möglichkeit, Datums- und Währungswerte sogar lokalisiert anzuzeigen.
Die Formatierung selbst erfolgt in zwei Schritten.

  1. Zunächst wird ein Objekt vom Typ NumberFormat erzeugt. Es erfasst die Eigenschaften des Formates selbst. Seine Methode setGroupingUsed() bewirkt über den Parameter false, dass der Tausender-Trenner nicht angezeigt wird.
  2. Im zweiten Schritt wird ein NumberFormatter erstellt, dessen Konstruktor das Format-Objekt übergeben wird. Die von DefaultFormatter geerbte Methode setAllowsInvalid() regelt, ob die Eingabe eines der Formatierung nicht entsprechenden Wertes erlaubt ist oder nicht. Durch Übergabe von false wird dies verhindert. Vorzeichen werden jedoch akzeptiert.

Das Formatter-Objekt wird schließlich beim Erzeugen des Textfeldes dem Konstruktor übergeben, das Textfeld dem JFrame hinzugefügt und dieser sichtbar gesetzt.

import java.text.NumberFormat;

import javax.swing.JFormattedTextField;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.text.NumberFormatter;

public class NumberTextFieldExample extends JFrame{

    public NumberTextFieldExample(){
        
        NumberFormat format = NumberFormat.getInstance();
        format.setGroupingUsed(false);
        NumberFormatter formatter = new NumberFormatter(format);
        formatter.setAllowsInvalid(false);
        JFormattedTextField field = new JFormattedTextField(formatter);
        
        this.add(field);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.pack();
        this.setLocationRelativeTo(null);
        this.setTitle("Zahlen-Textfeld");
        this.setVisible(true); 
    }
    
    public static void main(String[] args) {
        new NumberTextFieldExample();

    }
}