Eingabeprüfung beim Textfeld

TS-JC

Erfahrenes Mitglied
Hallo

also ich habe ein Textfeld und will von vornherein unterbinden das da jemand falsche Daten eingibt.
z.B. nur Zahlen oder nur Buchstaben zulassen

Habe nun im Netz geguckt und da was zu gefunden, JFormatedTextfield
Aber komme mit damit nicht klar :(
Schaffe es irgendwie nicht ein eigenes Format anzulegen bzw die Überprüfung hinzubekommen.
Habs von der Seite http://www.galileocomputing.de/openbook/javainsel4/javainsel_15_022.htm#t2t35

Vielleicht kann mir ja jemand dabei helfen, oder eine andere Lösung vorschlagen.
 
Zuletzt bearbeitet:
Alternativ geht es auch über ein Document, welches dem JTextField hinterlegt wird. Beispiele dazu müsste es genug hier geben, bitte Suchfunktion benutzen.
 
Hab mir das jetzt mal angeguckt.

Die 2. Lösung (JNumberField2) hat auch geklappt.
Allerdings wird da auch das Trennzeichen bei den 1000er Schritten eingefügt.
Das kann ich allerdings nicht gebrauchen, eher ein Zeichen für die Werte kleiner 1, z.B. Cent Angaben.

Habs das leider nicht hinbekommen :(

Trotzdem schonmal danke, ich versuchs weiter.
Falls jemand allerdings ne Lösung hat... :)
 
Moin,
ich versteh das einfach nicht. Wie man das erledigen kann, habe ich doch beschrieben. :rolleyes:
Na gut.

Wenn Du nur Integer-Eingaben zulassen willst, dann kann man das z.B. so umsetzen:

deinTextField.setDocument(new IntegerDocument());

Code:
import java.awt.*;
import javax.swing.text.*;

public class IntegerDocument extends PlainDocument
{
	public void insertString(int offset, String s, AttributeSet attributeSet) throws BadLocationException
	{
    try
    {
      Integer.parseInt(s);
    }
    catch(Exception ex)   // tritt nur auf, wenn es kein Integer ist
    {
      System.out.println("Kein Integer");
      return ;
    }
    super.insertString(offset,s, attributeSet);
	}
}
Die insertString-Methode kannst Du beliebig nach Deinen Wünschen anpassen.
 
Thx für die Hilfe, wir haben es jetzt folgendermaßen gelöst:

Java:
try
{
	modelDaten.nr = Integer.parseInt(textfeldNr.getText());		
}
catch (NumberFormatException f){
	textfeldNr.setBackground(new Color(255,183,183));
	allesOK = false;
}

Soll heissen wenn ein Fehler auftritt wird unser Feld rot gesetzt und die Variable allesOK auf false wodurch später das Fenster eben nicht geschlossen wird.

Frage erledigt, thx
 
Prima.
Ein letzter Tip noch:
Ich sehe

modelDaten.nr

Ergo ist nr eine public Variable in den ModelDaten. Sowas ist pfui und schlechtes OO-Design. Besser und empfohlen sind private-Variablen mit entsprechenden public gettern und settern.
 
Ich verstehe ansatzweise was du meinst.
Allerdings auch nicht mehr, könntest du es vielleicht näher erläutern?

Meinst du dann quasi im Model eine Methode die mir den Wert von nr ausgibt?
Dann müsste diese Methode allerdings public sein oder nicht?
 
Bei gettern gibst du den Inhalt zurueck und bei settern setzt du ihn.
Diese Methoden muessen also public sein, sonst koennte man ja von einer anderen Klasse aus auch mit den Methoden nichts anfangen. Ein Beispiel

Code:
class XXX {

    // dein objekt attribut
    private int value;

    // getter
    public int getValue() {
        return value;
    }

    // setter
    public void setValue(int value) {
        this.value = value;
    }
}
 
Zuletzt bearbeitet:
Vielen Dank für diese Info
Hab ich mir also doch richtig gedacht.

Werd ich in Zukunft mal so umsetzen.
 

Neue Beiträge

Zurück