Funktion des Keylistner mit einem JTextField

Hallo,

also ich würde das auf die schnelle eher so lösen:
Java:
/**
 * 
 */
package de.tutorials;

import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

/**
 * @author Tom
 * 
 */
public class AllowOnlyNumbersInTextField extends JFrame {
    public AllowOnlyNumbersInTextField() {
        super("AllowOnlyNumbersInTextField");
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        final JTextField textField = new JTextField(20);

        textField.setDocument(new PlainDocument() {
            @Override
            public void insertString(int offs, String str, AttributeSet a)
                    throws BadLocationException {
                StringBuilder stringBuilder = new StringBuilder(getText(0,
                        getLength()));
                stringBuilder.insert(offs, str);
                if (stringBuilder.toString().matches("[-]?\\d+\\.?\\d*")) {
                    super.insertString(offs, str, a);
                }
            }
        });

        add(textField);
        pack();
        setVisible(true);
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        new AllowOnlyNumbersInTextField();
    }
}

Gruß Tom
 
Hatte ich auch schon überlegt, aber der reguläre Ausdruck ist sehr einfach. Z.B. '1.2E-3' kann man nicht erfassen. Wenn man double Werte in allen Schreibweisen zulassen möchte wird es deutlich kniffliger. Für die meisten Fälle taugt Deine Lösung sicher.
 
Zurück