# JFormattedTextField mit DecimalFormat in ein Double



## BlackReloaded (9. Dez 2006)

Hi Leute,
es tut mir leid ich bin zwar erst seit gestern mit an Board, aber habe schon eine Frage  :cry: 

Ich suche den Fehler nun schon seit 4 Stunden und komme einfach nicht weiter, ich hoffe einer von euch kann mir helfen...

Also zum Problem:
Ich habe ein JFormattedTextField das ich mit DecimalFormat formatiere, soweit geht es auch.
Bei einem Event will ich mir aus dem Textfeld die Daten holen und in einem String zwischenspeichern, später dann mit Double.parseDouble(String) umwandeln und in die Datenbank schreiben.

Der Fehler liegt nun Darin das Double ja mit dem "." also Trennzeichen arbeitet DecimalFormat das jedoch leider als "," interpretiert da meine JRE als Default de hat.

Wie kann ich ihm nun sagen, dass er das als "." nutzen soll.... 

Ich nutze Jdk 1.5.0_05.


```
.
.
betrag_monat = new JFormattedTextField(new DecimalFormat("#.##"));
betrag_monat.setText("1.00");
.
.
public String[] getEinnahme()
 {
  String temp = "0";
  if(bezahlt_ein.isSelected()) temp = "1";
  String[] ret = {
    this.kontenliste[soll_combo.getSelectedIndex()][0],
    this.kontenliste[haben_combo.getSelectedIndex()][0],
    betrag.getText(),
    datum.getText(),
    beschreibung.getText(),
    temp
  };
  return ret;
 }
.
.
Double.parseDouble(ret[2])
.
.
```

Vielen Dank im Vorraus für die Hilfe....

MFG
Marc


----------



## SlaterB (9. Dez 2006)

> es tut mir leid ich bin zwar erst seit gestern mit an Board, aber habe schon eine Frage icon_cry.gif

> Ich suche den Fehler nun schon seit 4 Stunden und komme einfach nicht weiter, ich hoffe einer von euch kann mir helfen... 

wenn keiner Fragen stellt kann das Forum geschlossen werden,
mehr als 1 Stunde muss es nicht sein 

----------

wenn der Benutzer 1,00 eingibt und Double.parseDouble() . verlangt, dann musst du das Komma durch den Punkt ersetzen,
so ist das nun mal,

aber statt  Double.parseDouble() wird doch wohl auch das DecimalFormat-Objekt eine Parse-Operation haben?
benutz doch diese


----------



## BlackReloaded (9. Dez 2006)

Sry,

habe gerade eine Pause gemacht und nun ist es mir endlich eingefallen.  :lol: 
Ich weiß zwar nicht ob das die feine englische Art ist, aber ich habe es nun so gemacht:


```
betrag_monat = new JFormattedTextField(new DecimalFormat("#,##"));
betrag_monat.setText("1.00");
```

Naja so funktioniert es wenigstens....  :lol: 
Manchmal sieht man den Wald vor lauter Bäumen nicht mehr.

MFG
Marc


----------



## BlackReloaded (9. Dez 2006)

Danke SlaterB,
für die schnelle Antwort....
Andere Frage wie mache schalte ich den nun auf Abgeschlossen?


----------



## SlaterB (9. Dez 2006)

unten links ein Häckchen


----------



## BlackReloaded (9. Dez 2006)

Okay thanks,

jedoch funktioniert es doch nicht so wie ich es mir gedacht habe.

Sobald ich nun große Werte eintrage mach er alle 2 stellen ein "."
Wie geht das mit dem parse von DecimalFormat-Objekt eine Parse-Operation ?

Ich msus es aber Trotzdem in einem String zwischen speichern.


----------



## SlaterB (9. Dez 2006)

http://java.sun.com/j2se/1.4.2/docs/api/java/text/DecimalFormat.html

eine der Operationen die mit p anfangen,
ob das dann alle deine Probleme löst weiß ich aber nicht,
sehe nicht wirklich durch was du vor hast,
was wann warum scheitert,

z.B. gar nicht warum du dem Textfeld am Anfang was setzt
betrag_monat.setText("1.00")
und geht das überhaupt, ich denke ein Komma wird verlangt?, verwirrend...

außerdem sieht
new DecimalFormat("#.##")
eher nach Punkt als Komma aus, verwirrend...


----------



## BlackReloaded (9. Dez 2006)

Also ich hätte ganz gerne einen "." da Double intern ja mit einem "." arbeitet ( amerikanisch halt ) so wenn ich dem nun aber "#.##" nutzt er aber die deutsche schreibweise also nutzt "#,##" und wenn ich dne string versuche zu parsen gehts natürlich schief.....

also eigentlich möchte ich nur ein textfield das sicherstellt das da nur original double werte eingetragen werden können.

Und ich speichere das in einem String Array zwischen um es dem SQL-Objekt einfacher übergeben zu können.

Danke für die Seite, aber die kenne ich schon. Die hat leider nicht geholfen da die auf english ist und mit der englishen JRE arbeiten.

Klarer geworden ?!

MFG


----------



## SlaterB (9. Dez 2006)

wenn ich ein Programm wie 

```
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;

import javax.swing.JFormattedTextField;
import javax.swing.JFrame;

public class TestGUI extends JFrame {

	JFormattedTextField f = new JFormattedTextField(new DecimalFormat("#,##"));

	public TestGUI() throws Exception {
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		f.setText("1.00");

		f.addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				System.out.println(f.getText());
			}

		});

		getContentPane().add(f);
		setSize(150, 100);
		setVisible(true);
	}

	public static void main(String[] args) throws Exception {
		new TestGUI();
	}

}
```

habe, dann kann ich da Punkt und Komma live eingeben wie mir beliegt,
kann Punkt und Komma mit der setText()-Operation eingegen,
auch egal,

es wird beides, Punkt und Komma, anzeigt und bei Enter ausgelesen,
wo tritt das Problem auf? wer formatiert was?
wenn da 1.0 angezeigt wird, dann kommt doch wohl bei getText() nicht 1,0 raus?
oder doch? bei mir nicht

---------

> Die hat leider nicht geholfen da die auf english ist und mit der englishen JRE arbeiten. 

was heißt das? dass dir die Klassenbibliothek egal ist,
und wenn immer du eine Frage hast, dann soll dir jemand die passenden Operationen nennen?
wie hast du eigentlich JFormattedTextField gefunden? 

parse schreibt sich mit p, dann a, dann r, dann s und dann e,
das geht auch ohne English (sorry  )


----------



## BlackReloaded (9. Dez 2006)

Ich kann Englisch und ich weiß auch wie man das Schreibt, sry wenn ich es gerade falsch geschrieben habe.

Und die Bibliotheken sind mir keinesfalls egal, ich arbeite nur mit den Doc's, das Problem ist das die JRE eine Locale hat in der drinne steht "de" oder "uk" danach dreht er "." und "," um.

```
JFormattedTextField f = new JFormattedTextField(new DecimalFormat("#,##"));
```

und das dann auslese dann sind die Tausendertrennzeichen ein "," bzw er spielt ganz verrückt und macht jedes 2. Zeichen ein ","
wenn ich ein "#.##" mache dann kann man im Feld 3,23 eingeben und er und er sagt das ist Richtig, wenn ich nun aber mit getText() drauf zugreife bekomme ich lögischerweise 3,23 ich will aber 3.23 haben.
Mache ich es andereherum also so wie du "#,##" gehts gar nicht mehr.

Was meinste warum ich so am verzweifeln bin.

Edit: Das ich etwas mit setText() setzt soll nur dafür diehnen damit dort von vornherein etwas drinnen steht.


----------



## SlaterB (9. Dez 2006)

> Ich kann Englisch und ich weiß auch wie man das Schreibt, sry wenn ich es gerade falsch geschrieben habe.
> Und die Bibliotheken sind mir keinesfalls egal, ich arbeite nur mit den Doc's

das dreht sich im Kreis, ich hatte parse buchstabiert, damit du das so  z.B. in die Browser-Suche eingeben kannst,
es bleibt immer noch dabei: 
wenn du die parse-Operation von DezimalFormat sucht, dann schaue in die API

---------

du willst 3,23 eingeben und dann 3.23 mit getText() auslesen, das ist doch mal eine Aussage,
allerdings habe ich keine Ahnung wie das geht , vielleicht andere

bei mir liefert jedenfalls getText() genau das was drinsteht,
das hat nix mit Locale zu tun, sondern mit dem was man eingetippt hat 
(bin kein Experte für JFormattedTextField, gebe nur meine Tests mit dem angegeben Programm wieder),

das 'gar nix mehr geht' kann ich in meinem Programm nicht beobachten,
liegt vielleicht wieder an meiner zu alten Java-Version 1.4.2

da muss dir wohl jemand anders helfen, vielleicht in einem neuen Thread,

oder du postest mehr von deinem Code,
wann wird  getEinnahme() aufgerufen?
ist es kein Problem, dass das definierte JFormattedTextField betrag_monat heißt,
getText() aber an dem Objekt betrag gerufen wird?


----------



## BlackReloaded (9. Dez 2006)

So ich denke ich habe es nun wircklich gelöst.

Also den ganzen Code hätte ich nicht posten können da es zu viel wäre.(etwa 5k Zeilen).

Um deine Fragen noch zu beantworten, ja das war alles so ok und getestet.



```
String z = "" + betrag_monat.getValue();
```

Wie mir erscheint greift die Formatierung nur ein wenn man getValue() nutzt, nicht aber, wenn getText() genutzt wird...

Naja wie auch immer so Funktioniert es nun und das reicht.  :lol: 

Zu dem anderen: Belassen wir es so.  :bae: 
Aber glaube mir ein ich hatte alles durchsucht.

MFg

Marc Kohlbau[/code]


----------

