# Prüfen auf Hex-Wert fester Länge!



## sunnyfriday (7. Jan 2009)

BeitragVerfasst am: Mi Jan 07, 2009 9:44 pm    Titel: Prüfen auf Hex-Wert bestimmter Länge!! 	Antworten mit Zitat

hallo Leute,

habe eine frage ...
Ich habe ein JTextfield. Darin darf der User nur bestimmte Werte in hex eingeben.
Wie kann ich sicherstellen, dass der User wirklich einen hexwert fester Länge eingibt.

Zb. im Textfeld dürfen nur hexwerte von 00 -ff eingegeben werden.
Das bedeutet, prüfen ob der wert ein hexwert ist und ob die länge 2 ist.

Kann mir da jemand helfen???

gruß sunny


----------



## dayaftereh (7. Jan 2009)

Du kannst doch ein KeyListener and das JTextFeld hängen und die zeichen prüfen die eingegeben werden. Weiß nur nicht wie man das mit den Hex machen könnte^^


----------



## sunnyfriday (7. Jan 2009)

hallo !! 

das mit der Länge habe ich so gelöst.


```
JTextfield text = new JTextField(2);       
      this.text.setDocument(new LimitedText()); ...
```


```
class LimitedText extends DefaultStyledDocument {
	    public void insertString(int offs, String str, AttributeSet a) throws BadLocationException {
	        if ((getLength() + str.length()) <= 2 )
	            super.insertString(offs, str, a);
	    }
	}
```

Das Problem mit dem Hex leider noch nicht. 
Zb. wenn jemand FF eingibt, dann muss ich prüfen ob es eine Hexzahl ist, und dann in ein byte schreiben.
Gibt es vielleicht einen Filter welches ich setzten kann? zb. erlaubt sind nur Zeichen von 0-9 un A-F;

gruss sunny


----------



## Tobias (7. Jan 2009)

Einfacher als mit einem KeyListener dürfte es sein, ein eigenes Document zu schreiben, welches den gemachten Input prüft und im Fehlerfalle einfach nicht annimmt.


----------



## Spacerat (8. Jan 2009)

sunnyfriday hat gesagt.:
			
		

> Das Problem mit dem Hex leider noch nicht.


Wie wäre es, wenn man den Eingabestring mit
	
	
	
	





```
Integer.parseInt(eingabestring, 16);
```
parsed und eventuell geworfene Exceptions an passender Stelle abfängt? Denkbar wäre auch ein selbstgebauter Parser
	
	
	
	





```
boolean parse(String str)
{
    final String allowed = "0123456789abcdefABCDEF";
    if(str == null || str.length() == 0) return false;
    rc = true;
    for(int n = 0; n < str.length() && rc; n++) {
        rc &= allowed.contains(str.charAt(n));
    }
    return rc;
}
```
Wenn man etwaige Druckfehler übersieht, sollte das funzen. Schöner wäre es noch, wenn "allowed" eine Klassen-Konstante (static final) ist.

mfg Spacerat


----------



## Ebenius (8. Jan 2009)

Schöner als mit dem JTextField herumzubasteln ist natürlich, ein JFormattedTextField statt des JTextField zu nehmen und eine entsprechende Formatter-Klasse zu bauen.


----------

