# Beschränkung auf Nur-Zahleneingabe in Textfield klappt nicht



## milchmann (5. Aug 2007)

hallo,

ich habe folgendes problem:

über einen eigabedialog lasse ich mir einen wert eingeben, der eine ganzzahlige zahl (max. 4 stellen) sein muss um entsprechend weiterverarbeitet werden zu können.

ich habe dazu die in diesem forum dazu vorgeschlagene  klasse StandardDocumentNumbers


```
import java.awt.Toolkit;

import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

public class StandardDocumentNumbers extends PlainDocument {

 //  private int maxLength_ = Integer.MAX_VALUE;
	private int maxLength_ = Integer.MAX_VALUE;

   public StandardDocumentNumbers(int maxLength) {
      this.maxLength_ = maxLength;
   }

   public void insertString(final int offset, final String toInsert,
         final AttributeSet notUsed) throws BadLocationException {
   
      if (toInsert == null) return;      
      
      int actualLength = this.getLength();
      boolean isInt = true;
      
      if (actualLength + toInsert.length() < this.maxLength_) {
         String [] splitted = toInsert.split("");
         
         for (int i = 1; i< splitted.length; i++){
            
            if (!(splitted[i].toString().equals("1") || splitted[i].toString().equals("2") || splitted[i].toString().equals("3")
                  || splitted[i].toString().equals("4") || splitted[i].toString().equals("5")
                  || splitted[i].toString().equals("6") || splitted[i].toString().equals("7")
                  || splitted[i].toString().equals("8") || splitted[i].toString().equals("9")
                  || splitted[i].toString().equals("0"))) isInt = false;
         }
         
         if (isInt) super.insertString(offset, toInsert, notUsed);
         
      } else {
         Toolkit.getDefaultToolkit().beep();
      }
   }

} 

[\code]

implementiert.

an entsprechender stelle möchte ich darauf mit folgender funktion zurückgreifen:

[code]

private void mengeneingabe()  {
		
	StandardDocumentNumbers eingegebenes = new StandardDocumentNumbers(4);
	String eingegebeneMenge = (String)JOptionPane.showInputDialog("Bitte Menge eingeben (nur Zahlen)", "");
				
			
	try {
		eingegebenes.insertString(eingegebenes.getLength(), eingegebeneMenge, null);
	} catch (BadLocationException e) {
			System.out.println("es wurde keine zahl eingegeben");
			e.printStackTrace();
		}
			
		}

[\code]

leider klappt es nicht wie vorgesehen, weil
- ich kann mehr als 4-stellige zahlen eingeben ohne eine warnung zu bekommen
- ich kann auch buchstaben eingeben ohne eine warnung zu bekommen
- die länge des eingegebenen- eingegebenes.getLength()- wird mir immer mit 0 angegeben egal wie lange der eingegebene wert ist.

da so gar nichts klappt ,glaube ich die klasse "StandardDocumentNumbers" grundsätzlich falsch umgesetzt zu haben. ich hab erst einmal eine nacht darüber geschlafen - ohne allerdings auf den fehler gekommen zu sein und hoffe hier auf hilfe - vielleicht bin ich ja auf dem ganz falschen dampfer!
```


----------



## LordTerra (6. Aug 2007)

versuch doch einfach mit 


```
public boolean is_das_ne_zahl(String textfeld){

        return textfeld.matches( "[0-9]+" );
    }
```

ahja: [\code]  funktioniert net... /code schon eher


----------



## thE_29 (6. Aug 2007)

http://www.java-forum.org/de/viewtopic.php?t=7909

Dann baust du im LongDocument noch die Abfrage auf getLength() ein ob die größer 4 ist!
Wenn ja, machst du kein super.insertString!


----------



## Guest (6. Aug 2007)

herzlichen dank,

es funktioniert. warum es auf die ursprünglich vorgesehen weise nicht geklappt hat weiss ich zwar immer noch nicht - aber weshalb mit kanonen auf spatzen schiessen!


----------

