# Datum in einem TextField



## RealHAZZARD (6. Oktober 2005)

Tag auch.

   ich hab da mal ein Problem...
   Ich möchte gern dass der Benutzer ein Datum in mein JTextField 
   eingibt. Er soll aber nur Eingaben nach einem gewissen Muster
   machen können.  
   Muster: ##.##.#### oder auch
   Muster: dd.MM.yyyy
   wobei # für eine zahl zwischen 0-9 sein soll.

   Also ein Datum. Und der Benutzer soll keine andere möglichkeit haben,
   als zahlen eingeben zu können. Und die Punkte sollen auch schon unveränderlich
   drin stehen (wie beim IP-EingabeFeld in Netzwerkumgebung>>rechtsklick>>eigenschaften>>_deineLANVerbindung_>>eigenschaften>>TCPIP>>eigenschaften)
   Ich hab da schon einiges probiert auch mit JFormattedTextField, aber irgendwie 
   komm ich nicht drauf. Bin mir aber doch recht sicher dass es da was geben muss,
   ohne dabei das Rat neu erfinden zu müssen 

   THX


----------



## torsch2711 (6. Oktober 2005)

Hi,

  schonmal mit der klasse SimpleDateFormatter probiert?

  Ich denke, das dir dies weiterhilft.

  Ansonsten wenn du es selber schreiben willst, wären noch regular expressions empfehlenswert.

 Edit: hier noch ein kleiner link zu einem beispiel: http://www.devx.com/tips/Tip/21294?trk=DXRSS_JAVA

  Gruss,
  Torsten


----------



## RealHAZZARD (6. Oktober 2005)

Hallo...

  Ja das hab ich im Zusammenhang mit JFormattedTextfield probiert.
  Und zwar so:


```
SimpleDateFormat format_datum = new SimpleDateFormat( "dd.MM.yyyy" );
  	JFormattedTextField _ftextfeld_von_datum = new JFormattedTextField(format_datum);
```
 
  aber das greift nicht.
  Und selbst machen möchte ich das nicht. Nicht weil ichs nicht kann, sondern
  weil ich glaube dass es von sun schon was dazu gibt. Ist schließlich keine 
  Innovation die ich da machen möchte, hab das schon hier und da mach gesehen
  (Leider immer nur im Endprodukt).


----------



## RealHAZZARD (6. Oktober 2005)

Ich kann euch zumindest nochmal sagen wie ich es haben möchte
Wenn ihr XP habt...
windowstast+F drücken
"Dateien und Ordner suchen" wählen
"wann wurde die Datei geändert" wählen
Und dann seht ihr die eingabefelder schon.
So hätt ichs gern.


----------



## RealHAZZARD (7. Oktober 2005)

hat keiner ne Idee?
Wenns mit TextField oder FormattedTextField nicht sein soll
(obwohl das schön wäre) hab ich auch nichts dagegen wenn 
das mit nem JSpinner geht.


----------



## Thomas Darimont (7. Oktober 2005)

Hallo!


```
/**
  * 
  */
 package de.tutorials;
 
 import java.text.ParseException;
 
 import javax.swing.JFormattedTextField;
 import javax.swing.JFrame;
 import javax.swing.text.MaskFormatter;
 
 /**
  * @author Tom
  * 
  */
 public class MaskFormatterExample extends JFrame {
 
 	JFormattedTextField jtf = null;
 	public MaskFormatterExample() {
 		super("MaskFormatterExample");
 		setDefaultCloseOperation(EXIT_ON_CLOSE);
 
 		try {
 			jtf = new JFormattedTextField(new MaskFormatter("##.##.####") {
 				{
 					setPlaceholderCharacter('#');
 				}
 			});
 		} catch (ParseException e) {
 			e.printStackTrace();
 		}
 
 		add(jtf);
 
 		pack();
 		setVisible(true);
 	}
 
 	/**
 	 * @param args
 	 */
 	public static void main(String[] args) {
 		new MaskFormatterExample();
 	}
 }
```
 
 Gruß  Tom


----------



## RealHAZZARD (10. Oktober 2005)

Tach.
Danke das ist gut.
So ähnlich hatte ich das auch schon, aber mit hast das gefehlt:
setPlaceholderCharacter('#');

Gibt da nur noch ein kleines Prob. Es scheint als wäre es nicht editable
im Textfeld steht breits "##.##.####" und dass ich die Punkte nicht editieren 
kann ist ja schonmal Sahne, aber die # müssen sich in Zahlen (und nur Zahlen)
umschreiben lassen. Ich kriegs aber auch net so hin. :-(


----------



## RealHAZZARD (12. Oktober 2005)

Also ich hab jetzt anhand der Vorlage mal so einiges versucht, aber ich
bekomms nicht hin. Irgendwie will das nicht wie ich will.


----------



## RealHAZZARD (13. Oktober 2005)

Also so weit hab ich das jetzt:


```
import java.text.DateFormat;
 import java.text.ParseException;
 import java.text.SimpleDateFormat;
 
  import javax.swing.JFormattedTextField;
  import javax.swing.JFrame;
 import javax.swing.text.DateFormatter;
 import javax.swing.text.DefaultFormatterFactory;
 import javax.swing.text.MaskFormatter;
  
 
  public class MaskFormatterExample extends JFrame {
 
 	 public static void main(String[] args) {
 		 //MaskFormatter  dateFormat=null;
 		 JFormattedTextField fortxt = null;
 		 MaskFormatter dateFormat=null;
 		  JFrame f = new JFrame();
 		  f.setLocation(200,200);
 			  f.setDefaultCloseOperation(EXIT_ON_CLOSE);
 			  try 
 			  {
 			  	dateFormat= new  MaskFormatter("##.##.####");
 				  dateFormat.setPlaceholder("tt.mm.jjjj");
 			  	fortxt=new JFormattedTextField(dateFormat);
 				  
 			  }catch (ParseException pe)
 			  {
 				  System.out.println(pe);
 			  }
 			  dateFormat.setAllowsInvalid(false);
 			  
 			  try{fortxt.commitEdit();}catch(ParseException pe){}
 			  f.getContentPane().add(fortxt);
 			  f.pack();
 			  f.setVisible(true);
  }}
```
 
 Aber man kann noch alle Zahlen eingeben.
 z.B. für den Tag 41 oder so. Das soll ja nicht gehen.
 Vielleicht hat ja mal einer ne Idee.


----------

