Funktion des Keylistner mit einem JTextField

SirWayne

Erfahrenes Mitglied
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
 
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?
 
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
 
Java:
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();
			}
		}
		
	}

}
 
Leider kann man keinen Punkt mit eingeben... Wie mache ich dann das?
Ich möchte nämlich Double-Werte einfügen können...
 
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ß
 
Zurück