tutorials.de Buch-Aktion 05/2012
ERLEDIGT
JA
ANTWORTEN
12
ZUGRIFFE
1126
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    SirWayne SirWayne ist offline Mitglied Gold
    Registriert seit
    Apr 2006
    Beiträge
    129
    Eine kleine Frage zu diesem Listener.Ich habe ein JTextField und möchte nur Zahlen zulassen. Also hab ich dem JTextField einen KeyListener verpasst. Ich frage die Zahlen 0-9 ab das Problem ist nach der keyPressed methode schreibt er mir auf jeden Fall das Textfeld rein ...Warum das?wie kann ich das unterdrücken ,da ich mein Textfeld selber befüllen möchte
     

  2. #2
    MeinerEiner_80 Tutorials.de Gastzugang
    Moin!
    du könntest für dein Textfeld eine eigenes Dokument erzeugen
    (PlainDocument)
    http://java.sun.com/j2se/1.4.2/docs/...nDocument.html
    erzeugen und es ihm zuweisen. dort überschreibst du die insertString() Methode um nur Zahlen zuzulassen..

    *grüssle*
    MeinerEiner
     

  3. #3
    SirWayne SirWayne ist offline Mitglied Gold
    Registriert seit
    Apr 2006
    Beiträge
    129
    versteh nicht ganz wie du das meinst ...
    ich mach ein Dokument und weise dieses meinem Textfeld zu...
    ok soweit alles klar
    und wie überprüfe ich die eingabenwird die insertString methode bei einer eingabe automatisch aufgerufen?
     

  4. #4
    MeinerEiner_80 Tutorials.de Gastzugang
    Moin!

    Bevor ein Wert in das TextFeld eingefuegt wird, wird erst die Methode insertString deines Dokumentes aufgerufen..
    Wenn der Wert, den du einfügen willst okay ist, füge ihn ein (super.insertString()),
    wenn nicht.. nun dann halt nicht..

    Hab leider net viel Zeit sonst würd ich dir ein Beispiel posten.. aber vielleicht schaffst du es ja auch so...

    *grüssle*
    MeinerEiner
     

  5. #5
    SirWayne SirWayne ist offline Mitglied Gold
    Registriert seit
    Apr 2006
    Beiträge
    129
    ja die angaben müssten reichenich tüftel mal ein wenig hört sich zumindest nicht schwer an
     

  6. #6
    limago limago ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Ort
    Riedstadt (Hessen)
    Beiträge
    354
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    
    package de.tutorials;
     
    import java.awt.Toolkit;
     
    import javax.swing.JFrame;
    import javax.swing.JTextField;
    import javax.swing.UIManager;
    import javax.swing.UnsupportedLookAndFeelException;
    import javax.swing.text.AttributeSet;
    import javax.swing.text.BadLocationException;
    import javax.swing.text.PlainDocument;
     
    public class TextFeldDemo extends JFrame{
     
        public TextFeldDemo() {
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            JTextField demo = new JTextField(30);
            demo.setDocument(new IntegerDocument());
            getContentPane().add(demo);
            pack();
        }
        
        public static void main(String[] args) throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {
            UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
            new TextFeldDemo().setVisible(true);
        }
        
        class IntegerDocument extends PlainDocument {
     
            @Override
            public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
                try {
                    Integer.parseInt(str);
                    super.insertString(offs, str, a);
                } catch (NumberFormatException e) {
                    Toolkit.getDefaultToolkit().beep();
                }
            }
            
        }
     
    }
     

  7. #7
    SirWayne SirWayne ist offline Mitglied Gold
    Registriert seit
    Apr 2006
    Beiträge
    129
    Vielen Dank
     

  8. #8
    BladeS_MC BladeS_MC ist offline Grünschnabel
    Registriert seit
    Oct 2004
    Beiträge
    2
    Leider kann man keinen Punkt mit eingeben... Wie mache ich dann das?
    Ich möchte nämlich Double-Werte einfügen können...
     

  9. #9
    SirWayne SirWayne ist offline Mitglied Gold
    Registriert seit
    Apr 2006
    Beiträge
    129
    mach einfach ein if vor dem Parse int
     

  10. #10
    limago limago ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Ort
    Riedstadt (Hessen)
    Beiträge
    354
    Ganz so einfach ist das nicht. "str" enthält nur die aktuelle Eingabe, also in der Regel nur ein Zeichen, wenn nicht mit der Zwischenablage oder Drag and Drop gearbeitet wird. Bei Doublewerten muss immer der Gesamtausdruck geparst werden. Zwischenstufen wie "3." oder "3E4" müssen auch möglich sein. Bin leider sehr im Stress, wenn ich Zeit habe kommt eine Lösung....

    Vielleicht ist jemand anders schneller.

    Gruß
     

  11. #11
    limago limago ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Ort
    Riedstadt (Hessen)
    Beiträge
    354
    Hatte leider keine Zeit für eine Lösung, habe aber das hier im Netz gefunden:

    http://www.java2s.com/Code/Java/Swin...cTextField.htm
     

  12. #12
    Registriert seit
    Jun 2002
    Ort
    Saarbrücken (Saarland)
    Beiträge
    9.886
    Blog-Einträge
    29
    Hallo,

    also ich würde das auf die schnelle eher so lösen:
    Code java:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    
    /**
     * 
     */
    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
     
    Java rocks!
    How to become a good Java Programmer?
    Does IT in Java and .Net
    The only valid measurement of code quality: WTFs / minute
    Blog
    Xing
    Twitter

  13. #13
    limago limago ist offline Mitglied Brokat
    Registriert seit
    May 2007
    Ort
    Riedstadt (Hessen)
    Beiträge
    354
    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.
     

Ähnliche Themen

  1. Falscheingabe in einem Jtextfield abfangen
    Von subezro im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 2
    Letzter Beitrag: 01.09.10, 16:45
  2. Funktion in einem Frame ausführen
    Von meiner0815 im Forum Javascript & Ajax
    Antworten: 2
    Letzter Beitrag: 08.09.06, 14:19
  3. Einzelne Zeilen aus einem JTextfield auslesen
    Von Hayes im Forum Swing, Java2D/3D, SWT, JFace
    Antworten: 4
    Letzter Beitrag: 10.02.05, 16:47
  4. Antworten: 2
    Letzter Beitrag: 22.09.04, 15:55
  5. install.php formular und funktion in einem
    Von melistik im Forum PHP
    Antworten: 1
    Letzter Beitrag: 05.09.03, 14:45