# Felder formattieren



## acky (23. Mai 2005)

hi,

ich soll in ein programm felder mit folgenden bedingungen einbauen:
- die formattierung der felder soll erwartungskonform sein (z.b. *dezimaltrennzeichen entsprechend der sprache*)
- verfeinern sie das programm so, dass in das obere eingabefeld *nur zahlen (bestehend aus ziffern, ggf. vorzeichen (+/-) und ggf. dezimaltrennzeichen ) eingegeben werden* können.

kann mir jemand sagen, wie ich dies realisieren kann?!

thx,
acky


----------



## torsch2711 (24. Mai 2005)

Hmm,

 das ist nicht sehr aussagekräftig, aber ich versuch es mal,
 um alles abzudecken mit der Formatierung, würde ich Regular Expressions empfehlen.
 Eine Bibliothek findest du bei Apache: http://jakarta.apache.org/regexp/index.html

 Mittels Regular Expressions, kannst du den String auf Muster und formen überprüfen.

 Damit kannst du dann auch das mit den verschiedenen Sprachen abdecken. Falls fragen zu Regular Expressions sind:

http://www.regular-expressions.info/
http://www.amk.ca/python/howto/regex/

 Zu dem Verfeinern:

 Du kannst jeden String im Feld abprüfen, ob es ein Integer, Double, etc ist mit den entsprechenden funktionen:
 z.B.:
 Integer.parseInt(String), dies wirft eine Exception wenn es keine Zahl ist, oder wie gesagt Regular Expressions wieder nehmen.

 Das würde mir so auf die schnelle einfallen

 Gruss,

 Torsten


----------



## flar_p (24. Mai 2005)

Ich kann dem Beantworter vor mit nicht ganz recht geben. Mit regular expressions lässt sich das zwar machen, ist aber viel zu kompliziert.

Schau dir die Klasse "Numberformat" in der Java API an. Ihr kannst du ein sogenanntes "Locale" übergeben, das mit der Iso Sprache und dem Länderkürzel gebildet wird. Diese Klassen erledigen die Formatierung ganz von alleine. Sprich es wird je nach Land Komma und Tausenderpunkt richtig gesetzt. Da ich mal annehme, dass das eine Hausübung für dich ist, poste ich kein Codebeispiel. Du kannst ja bei Problemen nochmal fragen.

Den zweiten Teil der Aufgabe würde ich wie acky lösen. mit parsen in eine Zahl und abfangen der Exception.

Grüße

Ralf


----------



## Thomas Darimont (24. Mai 2005)

Hallo!

Schau mal hier:

```
/**
 * 
 */
package de.tutorials;

import java.awt.BorderLayout;

import javax.swing.InputVerifier;
import javax.swing.JComponent;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.text.JTextComponent;

/**
 * @author Darimont
 */
public class InputExample extends JFrame {

	public InputExample() {
		super("InputExample");
		setDefaultCloseOperation(EXIT_ON_CLOSE);

		JTextField jtf = new JTextField(10);

		jtf.setInputVerifier(new InputVerifier() {
			public boolean verify(JComponent input) {
				JTextComponent jtc = (JTextComponent) input;
				String text = jtc.getText();

				//Nur Zahlen eingaben zulassen
				return text.matches("\\d*");
			}
		});

		add(jtf, BorderLayout.CENTER);

		jtf = new JTextField(10);

		jtf.setInputVerifier(new InputVerifier() {
			public boolean verify(JComponent input) {
				JTextComponent jtc = (JTextComponent) input;
				String text = jtc.getText();

				//Keine Zahlen zulassen
				return text.matches("\\D*");
			}
		});

		add(jtf, BorderLayout.SOUTH);

		pack();
		setVisible(true);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		new InputExample();
	}

}
```

Für das richtige Zahlenformat (für die jeweilige Locale) würde ich auch wie flar_p die Klasse NumberFormat empfehlen.

Gruß Tom


----------



## acky (24. Mai 2005)

danke!
hilfst alles weiter! schreib da bald auch ne klausur - und werd mich gleich alles mal genauer anschauen - muss für eben diese klausur halt auch quasi alle optionen drauf haben!
nun hab ich noch gehört, um die eingabe "anderen" zeichen als z.b.  zifffern *direkt zu unterbinden*, müsste ich für das textfeld eine eigene dokumenteklasse erstellen bzw. da plain-document oder so ähnlich der dokumentenklasse oder der textfeldklasse überschreiben.
kann da jemand mehr als ich mit anfangen und kann mir evtl. mehr oder genaueres dazu sagen?!

thx.
acky


----------



## torsch2711 (25. Mai 2005)

Hi, ich nochmal

  also das mit dem InputVerifier ist eine gute lösung.

  Intern verwendet dieser halt auch Reg-Exp denke ich mal.

 an flar_p: da in dem format auch ein länderspezifisches Datumsformat vorkommen kann (so wie ich die aufgabe verstanden habe), kommst du um Regular Expressions nicht drumherum, da z.B. die staaten nicht immer Monatszahlen nehmen, sonder 3-stellige Monatsabkürzungen wie z.B.: 01-jan-05 oder so und da kommt man mit NumberFormat nicht weiter. Ist halt eine weiterführende abdeckung der aufgabe (wenn dies nicht gefragt wurde, einfach als goodie ansehen  )

  Wie gesagt, auch der InputVerifier verwendet Reg-Exp zur verifizierung.




  Gruss,
  Torsten


----------

