# Eingabe einschränken bei TextField



## Sven (15. Nov 2004)

Hallo

Ich hab ein TextFeld bei dem der Benutzer eine Eingabe machen soll. Nach dem er diese eingabe erledigt hat klickt er auf einen Button. Jetzt soll abgeprüft werden, ob nur diese Zeichen '1234567890+-±' in diesem String enthalten sind.

Gibt es vielleicht wie in ABAP Vergleichsoperatoren für zeichenartige Felder? 

Bedanke mich als im Voraus für einen Lösungvorschlag.

Gruß Sven


----------



## bygones (15. Nov 2004)

eine Möglichkeit wären Reguläre Ausdrücke...


----------



## Illuvatar (15. Nov 2004)

```
if (textfield.getText().matches ("[0-9\\+-±]+")){

}
```


----------



## Sven (15. Nov 2004)

Danke!


----------



## Sky (15. Nov 2004)

Schau Dir auch mal die Klasse 'Document' an. Mit ihrer Hilfe kannst Du schon zur Eingabezeit den String validieren und unerwünschte Zeichen nicht in das Textfeld eintragen lassen.


----------



## Sven (16. Nov 2004)

Also ich hab jetzt folgendes Problem. Ich glaub ich hab meine Frage etwas ungenau formuliert.

Es soll so ein, dass ich ein TextField habe und dieses TextField macht der Benutzer zum Beispie die Eingabe 12±3. Jetzt soll abgeprüft werden, ob die Zeichen aus dem TextField aus der Menge {1234567890+-±} stammen. Damit er zum Beispiel nicht 12easd eingibt.

Mit TextField.getText().maches("1234567890+-±") wird ja genau nach der Zeichenkette gesucht.

Wichtig ist, dass wenn der Benutzer eine fehlerhaft Eingabe macht, eine Fehlermeldung ausgespuckt wird. 


Gruß Sven


----------



## thE_29 (16. Nov 2004)

Du könntest in den FAQ die Textfelder mit Dokumentarten anschauen, ich hab da ein double Textfield gemacht, das dir nur Zahlen eingeben kann!

Für -+ musst es halt noch umschreiben (hab sogar so eines irgendwo  in meinem source..)


----------



## Sven (16. Nov 2004)

Hallo


Hab das jetzt mit den Zahlen anhand deines Beispiels in FAQ hinbekommen.

Aber wie ich das mit +-± hinbekomme weis ich noch nicht so ganz. Ich weis auch nicht wo dein "Source".

Vielleicht kannst du mir ja weiterhelfen.

Gruß Sven


----------



## thE_29 (16. Nov 2004)

mein Source ist bei mir aufn Rechner, bzw im SourceSafe 

brauchst du den das ± unbedingt?

Sonst könnte ich einfach ein negativeInteger und ein negativeDouble Document Online stellen!


----------



## Sven (16. Nov 2004)

Ja das mit dem ± ist wichtig! 

Gruß Sven


----------



## thE_29 (16. Nov 2004)

Und auf welches Zeichen soll ich da abfragen??

Wie tippt man das in die Tastatur??

http://www.java-forum.org/de/viewtopic.php?p=55306#55306

Hier hast du mal ein NegativeDoubleDocument

mit +/- das ± ist nur noch spielerei!


edit: habt dir dein ± eingebaut, weiß zwar noch immer nicht wie du das drückst, aber gut!


Achja, er wandelt alle , in ein . um => also das Kommazeichen ist ein .


----------



## Guest (16. Nov 2004)

alt + 241(auf dem num Block) ist ausdrücklich von unseren Mitarbeitern gewünscht.

Sorry kann ja auch nix dafür 

Gruß Sven


----------



## thE_29 (16. Nov 2004)

jo, also das aus den FAQ sollte hinhauen!


----------



## Sven (16. Nov 2004)

Hallo

Ich hab folgendes Problem. Die Klasse schmeißt bei + - ± immer eine Exception, schreibt zwar das Zeichen hin, aber ich will ja die Exception für eine Fehlermeldung abfangen. Wie könnte ich das den am besten machen?

Info: Deine Eingabeform soll ungefähr so sein (kein Komma) 123±4. Hab deswegen einige Kleinigkeite geändet.

Hab dir mal den abgeänderten Quellcode angefügt.


```
import javax.swing.text.PlainDocument; 
import javax.swing.text.AttributeSet; 
import javax.swing.text.BadLocationException; 
import javax.swing.JTextField; 
import javax.swing.JOptionPane;

/***************************************************************************** 
* 

Überschrift: NegativeDoubleDocument das ein negatives vorzeichen annimmt</p> 
* 

Beschreibung: NegativceDoubleDocument das an der 1ten Stelle ein negatives Vorzeichen 
* annehmen kann und überprüft ob man nochmal - drückt + kommastellen ersetzung und Überprüfung</p> 
* 

Copyright: Copyright (c) 2004</p> 
* 

Organisation: Taschek Jörg</p> 
* @author Taschek Jörg 
* @version 1.0 Erstversion 16.11.2004: Erstversion 
***************************************************************************/ 
public class textfeldeingabe_isthaerte 
    extends PlainDocument 
{ 
  private JTextField myField = null; 
  private boolean bDot = false; 
  
  /*************************************************************************** 
   * Konstruktor mit übergabe für das Textfeld zum nachsehn ob schon ein Minus 
   * zeichen da ist oder nicht 
   * @param TextField textfeld 
   **************************************************************************/ 
  public textfeldeingabe_isthaerte(JTextField TextField) 
  { 
    myField = TextField; //merkt sich das Feld 
    //myField.setHorizontalAlignment(JTextField.LEFT); //das es links steht 
  } 

  /*************************************************************************** 
   * Funktion erlaubt + (nicht sichtbar) und - (sichtbar) zeichen in den zahlen 
   * @param offset int 
   * @param s string 
   * @param attributeSet att 
   * @throws BadLocationException 
   **************************************************************************/ 
  public void insertString(int offset, String s, AttributeSet attributeSet) throws BadLocationException 
  { 
    try 
    { 
      /*if(s.equals(",")) //ersetzt den , durch einen Punkt 
        s = "."; 
      bDot = myField.getText().indexOf(".") == -1 ? false : true; //merkt sich ob ein Punkt oder nicht 
      if (s.length() > 1) 
      { 
        //wenn der String größer als 1 ist, ist es eine ganze IP und somit eine Schleife 
        for(int x = 0; x != s.length(); x++) 
          insertString(x,s.substring(x,x+1).replaceFirst(",","."),null); //ersetzt , durch Punkt 
        //mach gar nix, weil die for schleife alles macht! 
          return; 
      }*/ 
      //else 
      if(s.equals("-")) 
      { 
        String strTmp = myField.getText(); //holt sich den Text 
        if(strTmp.indexOf("-")!=-1) //schaut nach ob ein minus vorhanden ist 
          strTmp = strTmp.replaceAll("-",""); //wenn ja weg 
        else 
          strTmp =   strTmp + "-"; 
        myField.setText(""); 
        super.insertString(0,strTmp,attributeSet); 
        return; 
      } 
      else if(s.equals("+")) //bei einem + einfach ein weiteres - hinzufügen 
      { 
		String strTmp = myField.getText(); //holt sich den Text 
        if(strTmp.indexOf("+")!=-1) //schaut nach ob ein minus vorhanden ist 
          strTmp = strTmp.replaceAll("+",""); //wenn ja weg 
        else 
          strTmp =   strTmp + "+"; 
        myField.setText(""); 
        super.insertString(0,strTmp,attributeSet); 
        return;  
      } 
      //OPTIONAL!!! STATT DEM ± kann man jedes Zeichen nehmen oder komplett weglassen 
      //wenn man irgendwelche Zeichen zB noch haben will <!--- OPTIONAL ---!> 
      else if(s.equals("±")) 
      { 
        String strTmp = myField.getText(); 
        if(strTmp.indexOf("±") != -1) 
          strTmp = strTmp.replaceAll("±",""); 
        else 
          strTmp =   strTmp + "±"; 
        myField.setText(""); 
        super.insertString(0,strTmp,attributeSet); 
        return; //damit aufgehört wird 
      } 
      //ENDE OPTIONAL!!!!!!!!!!!!!!!!!!!! 
//wenn das aktuelle Zeichen kein punkt ist oder wenn es ein Punkt ist und schon ein Punkt eingegegeben ist 
      //else if(!s.equals(".") || bDot)  // ==   if(!(s.equals(".") && !bDot)) 
      //Double.parseDouble(s);
      Integer.parseInt(s);  

    } 
    catch(Exception ex) 
    { 
      	String titel1 = "Fehler bei der Eingabe";
		String message1 = "Das Eingabefeld erlaubt nur folgende Zeichen '123456789*+-±'";

		JOptionPane.showMessageDialog(null, message1, titel1, JOptionPane.ERROR_MESSAGE);
      return; 
    } 
    super.insertString(offset,s, attributeSet); 
  } 
}
```


----------



## thE_29 (16. Nov 2004)

Also die Exception ist im eigentlich Sinn der Fehler, wenn du eine Falsche Taste drückst, sonst ist der nix (ist nur über Exception gelöst worden)

parse mal ein A als Int, geht net, ist klar warum 

Du könntest aber in dem Exception Zweig ein JOptionPane machen wo du sagst, der String s (das Zeichen) kann nicht eingegeben werden.

Und wenn ich verstehe, willst du dass das ± nicht vorne sondern genau dort ist wo du es eingibst??

Aber das +/- passt?



Edit: hab gerade kapiert (getestet) was du meinst, wart mal kurz!


----------



## thE_29 (16. Nov 2004)

So, habs um/ausgebessert


```
public void insertString(int offset, String s, AttributeSet attributeSet) throws BadLocationException
  {
    try
    {
      //das net entfernen, sonst geht das setText nicht! nichts auskommentieren wenn man net genau weiß was es tut
      if (s.length() > 1)
      {
        //wenn der String größer als 1 ist, ist es eine ganze IP und somit eine Schleife
        for(int x = 0; x != s.length(); x++)
          insertString(x,s.substring(x,x+1),null); //ersetzt , durch Punkt
        //mach gar nix, weil die for schleife alles macht!
          return;
      }
      else if(s.equals("-"))
      {
        String strTmp = myField.getText(); //holt sich den Text
        if(strTmp.indexOf("-")!=-1) //schaut nach ob ein minus vorhanden ist
          strTmp = strTmp.replaceAll("-",""); //wenn ja weg
        else
          strTmp =   strTmp + "-";
        super.insertString(0,"",attributeSet);
        super.insertString(0,strTmp,attributeSet);
        return;
      }
      else if(s.equals("+")) //bei einem + einfach ein weiteres - hinzufügen
      {
      String strTmp = myField.getText(); //holt sich den Text
        if(strTmp.indexOf("+")!=-1) //schaut nach ob ein minus vorhanden ist
          strTmp = strTmp.replaceAll("+",""); //wenn ja weg
        else
          strTmp =   strTmp + "+";
        super.insertString(0,"",attributeSet);
        super.insertString(0,strTmp,attributeSet);
        return;
      }
      else if(s.equals("±"))
      {
        String strTmp = myField.getText();
        if(strTmp.indexOf("±") != -1)
          strTmp = strTmp.replaceAll("±","");
        else
          strTmp =   strTmp + "±";
        super.insertString(0,"",attributeSet);
        super.insertString(0,strTmp,attributeSet);
        return; //damit aufgehört wird
      }
      Integer.parseInt(s);

    }
    catch(Exception ex)
    {
      String titel1 = "Fehler bei der Eingabe";
      String message1 = "Das Eingabefeld erlaubt nur folgende Zeichen '123456789*+-±'";

      JOptionPane.showMessageDialog(null, message1, titel1, JOptionPane.ERROR_MESSAGE);
      return;
    }
    super.insertString(offset,s, attributeSet);
  }
```

Mehr brauchst net ändern!


----------



## Hallo (17. Nov 2004)

Folgendes Problem

Wenn ich jetzt zum Beispiel 64 eingebe und als nächstes ein +. Dann schreibt er 64+64 hin. Er fügt also die 64 einfach hinzu, obwohl ich nur ein + eingegeben hab.

Finde leider nicht die Stelle vor er das reinschreibt.

Gruß Sven


----------



## thE_29 (17. Nov 2004)

also hier ist die Version die das +/- ± richtig macht und wenn ich richtig schätze, willst du ja Formeln schreiben, also sollte das automatische +/- setzen net drinnen sein!

Hier kannst du nur 1mal - und 1mal + machen


```
public void insertString(int offset, String s, AttributeSet attributeSet) throws BadLocationException
    {
      try
      {
        //das net entfernen, sonst geht das setText nicht! nichts auskommentieren wenn man net genau weiß was es tut
        if (s.length() > 1)
        {
          //wenn der String größer als 1 ist, ist es eine ganze IP und somit eine Schleife
          for(int x = 0; x != s.length(); x++)
            insertString(x,s.substring(x,x+1),null); //ersetzt , durch Punkt
          //mach gar nix, weil die for schleife alles macht!
            return;
        }
        else if(s.equals("-"))
        {
          String strTmp = myField.getText(); //holt sich den Text
          if(strTmp.indexOf("-")!=-1) //schaut nach ob ein minus vorhanden ist
            strTmp = strTmp.replaceAll("-",""); //wenn ja weg
          else
            strTmp =   strTmp + "-";
          myField.setText("");
          super.insertString(0,strTmp,attributeSet);
          return;
        }
        else if(s.equals("+")) //bei einem + einfach ein weiteres - hinzufügen
        {
          String strTmp = myField.getText(); //holt sich den Text
          if(strTmp.indexOf("+")!=-1) //schaut nach ob ein minus vorhanden ist
            strTmp = strTmp.replaceAll("\\+",""); //wenn ja weg --> elendiges +
          else
            strTmp = strTmp + "+";
          myField.setText("");
          super.insertString(0,strTmp,attributeSet);
          return;
        }
        else if(s.equals("±"))
        {
          String strTmp = myField.getText();
          if(strTmp.indexOf("±") != -1)
            strTmp = strTmp.replaceAll("±","");
          else
            strTmp =   strTmp + "±";
          myField.setText("");
          super.insertString(0,strTmp,attributeSet);
          return; //damit aufgehört wird
        }
        else if(!s.equals(""))
          Integer.parseInt(s);

      }
      catch(Exception ex)
      {
        String titel1 = "Fehler bei der Eingabe";
        String message1 = "Das Eingabefeld erlaubt nur folgende Zeichen '123456789*+-±'";

        JOptionPane.showMessageDialog(null, message1, titel1, JOptionPane.ERROR_MESSAGE);
        return;
      }
      super.insertString(offset,s, attributeSet);
    }
```

Hier kannst du soviel +/- ± machen wie du willst, also sowas

64+98-456±646


```
public void insertString(int offset, String s, AttributeSet attributeSet) throws BadLocationException
    {
      try
      {
        //das net entfernen, sonst geht das setText nicht! nichts auskommentieren wenn man net genau weiß was es tut
        if (s.length() > 1)
        {
          //wenn der String größer als 1 ist, ist es eine ganze IP und somit eine Schleife
          for(int x = 0; x != s.length(); x++)
            insertString(x,s.substring(x,x+1),null); //ersetzt , durch Punkt
          //mach gar nix, weil die for schleife alles macht!
            return;
        }
        else if(s.equals("-"))
        {
          String strTmp = myField.getText(); //holt sich den Text
          strTmp =   strTmp + "-";
          myField.setText("");
          super.insertString(0,strTmp,attributeSet);
          return;
        }
        else if(s.equals("+")) //bei einem + einfach ein weiteres - hinzufügen
        {
          String strTmp = myField.getText(); //holt sich den Text
          strTmp = strTmp + "+";
          myField.setText("");
          super.insertString(0,strTmp,attributeSet);
          return;
        }
        else if(s.equals("±"))
        {
          String strTmp = myField.getText();
          strTmp =   strTmp + "±";
          myField.setText("");
          super.insertString(0,strTmp,attributeSet);
          return; //damit aufgehört wird
        }
        else if(!s.equals(""))
          Integer.parseInt(s);

      }
      catch(Exception ex)
      {
        String titel1 = "Fehler bei der Eingabe";
        String message1 = "Das Eingabefeld erlaubt nur folgende Zeichen '123456789*+-±'";

        JOptionPane.showMessageDialog(null, message1, titel1, JOptionPane.ERROR_MESSAGE);
        return;
      }
      super.insertString(offset,s, attributeSet);
    }
```


----------



## Sven (17. Nov 2004)

Hallo 

Wie könnte ich den festlegen, dass man in einer Comobox nur Zahlen eingeben kann. Es gibt ja dort die Möglichkeitwas auszuwählen oder auch was manuell einzugeben. Wenn jetzt jemand dort  was manuell eingibt sollen nur Zahlen erlaubt sein. 

Vielen Dank als im Voraus für die Hilfe.

Gruß Sven


----------



## thE_29 (17. Nov 2004)

Weiß net, hab mich mit ComboBoxen net wirklich beschäftigt, könntest aber probieren, ob es mit Renderer oder Editoren geht!


----------

