ERLEDIGT
JA
JA
ANTWORTEN
12
12
ZUGRIFFE
1126
1126
EMPFEHLEN
-
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
-
11.05.07 14:34 #2MeinerEiner_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
-
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?
-
11.05.07 18:33 #4MeinerEiner_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
-
ja die angaben müssten reichenich tüftel mal ein wenig
hört sich zumindest nicht schwer an
-
12.05.07 09:39 #6
- 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(); } } } }
-
Vielen Dank
-
Leider kann man keinen Punkt mit eingeben... Wie mache ich dann das?
Ich möchte nämlich Double-Werte einfügen können...
-
mach einfach ein if vor dem Parse int
-
21.05.07 07:44 #10
- 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ß
-
22.05.07 18:50 #11
- 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
-
22.05.07 23:45 #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ß TomJava 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
-
23.05.07 08:38 #13
- 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
-
Falscheingabe in einem Jtextfield abfangen
Von subezro im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 2Letzter Beitrag: 01.09.10, 16:45 -
Funktion in einem Frame ausführen
Von meiner0815 im Forum Javascript & AjaxAntworten: 2Letzter Beitrag: 08.09.06, 14:19 -
Einzelne Zeilen aus einem JTextfield auslesen
Von Hayes im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 4Letzter Beitrag: 10.02.05, 16:47 -
Mit regex Zahlen aus einem JTextfield filtern
Von Hayes im Forum JavaAntworten: 2Letzter Beitrag: 22.09.04, 15:55 -
install.php formular und funktion in einem
Von melistik im Forum PHPAntworten: 1Letzter Beitrag: 05.09.03, 14:45





Zitieren

Login





