Datum in einem TextField

RealHAZZARD

Erfahrenes Mitglied
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
 
Hallo...

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

Code:
  	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).
 
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. :-)
 
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.
 
Hallo!

Code:
 /**
  * 
  */
 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
 
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. :-(
 
Also ich hab jetzt anhand der Vorlage mal so einiges versucht, aber ich
bekomms nicht hin. Irgendwie will das nicht wie ich will. :-)
 
Also so weit hab ich das jetzt:

Code:
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.
 
Zurück