SWT: Textbox mit Autoformat

Vatar

Erfahrenes Mitglied
Und schnell noch eine Frage zu einer Textbox...diesmal habe ich auch schon die Suche bemüht :)

Es geht darum, dass ich in ein Feld (die Textbox) Kilometer eintrage. In der Datenbank ist das Ganze als Integer hinterlegt, für die Anzeige hätte ich aber gerne die Tausenderpunkte (100.000). Jetzt wäre meine Frage ob es da eine Möglichkeit gibt eine Art Formatter drüber zu legen der das automatisch macht, ohne dass ich am Ende mit einem RegEx o.ä. den String wieder in einen Integer umformen muss?

Danke
 
Ich muss diesen Thread noch einmal reaktivieren. Langsam tut es mir ja schon richtig leid andauernd zu fragen (aber ich find einfach nix was mir wirklich weiter hilft). Vor allem hab ich langsam ein schlechtes Gewissen da meine Fragen die Zahl meiner Antworten (Hilfestellunge) weit überschreitet, aber ich denke nun mal meistens dass es qualifiziertere Leute gibt die fast alle Fragen besser beantworten können (*hüstl* TOM *hüstl*).

Inzwischen bin ich so weit gekommen dass ich die java.text.Format Klassen benutze, um genau zu sein
Java:
currencyFormatter = NumberFormat.getCurrencyInstance(Locale.GERMAN);
decimalFormatter = DecimalFormat.getInstance(Locale.GERMAN);

Die formatierung passt soweit nur dass mir der currencyFormatter einen etwas seltsamen String liefert ¤ 1.000,00 (keine ahnung wo dieses ¤ herkommt).

Das größere Problem ist im Moment dass mein Textfeld den Cursor nach der Eingabe eines Zeichens an den Anfang setzt. Klar, ich setzte ja den Text neu (weil ich jede Eingabe im Datenmodell zwischenspeichere). Hier ein Ausschnitt aus meinem ModifyListener
Java:
else if(event.getSource() == distanceField){
	try{
		if(distanceField.getText().length() != 0)
			part.setDistance(decimalFormatter.parse(distanceField.getText()).intValue());
		distanceField.setText(decimalFormatter.format(part.getDistance()));
	}catch(ParseException ex){
		ex.printStackTrace();
	}
}

Wie gesagt, die Formatierung passt, nur wie krieg ich das hin dass der Cursor an der alten Stelle bleibt (genauer gesagt eine Stelle hinter der alten). Ich habe es schon mit distanceField.getCursor() und setCursor(...) probiert.

Wieder einmal Danke im Voraus
 
Hallo Vatar,
wäre es nicht ausreichend wenn Du den modifizierten Text erst in die DB schreibst wenn der Benutzer fertig ist mit der Eingabe? Also wenn er Enter oder Tab drückt, oder mit der Maus woanders hin klickt und das Text Feld den Fokus verliert.

Ich habe das glaube ich auch mal mit einem Focus Lost Listener implementiert anstatt mit dem Modify Listener.

Hinweis falls Du es so machst: Es gibt Probleme mit dieser Methode mit der SWT Implementierung auf dem Mac. (Zumindest mit SWT 3.2 und abwärts)...

Beste Grüße
Steffen
 
Die Sache ist die, ich nutze den Master Details Pattern innerhalb eines Editors und die Änderungen sollen nicht verloren gehen auch nicht wenn zwischenzeitlich ein anderes Objekt aus dem Viewer im Masterbereich gewählt wird. Deshalb werden alle Änderungen sofort in das DatenModell geschrieben.

In die Datenbank wird erst gespeichert wenn der Editor gespeichert wird. Will der Benutzer nicht speichern so wird das Datenmodell wieder mit dem entsprechenden persistenten Objekt aus der Datenbank aktualisiert und so der alte Stand wiederhergestellt.

Ich hatte auch schon mit einem FocusListener herumexperimentiert, allerdings können da Änderungen verloren gehen wenn der Benutzer das Feld vorher nicht verlässt. Du kannst dir meinen Editor wie den plugin.xml-Editor aus Eclipse vorstellen, der funktioniert genauso.

Aber das war eigentlich nicht mein Problem ;)
 
Zurück