# JDateChooser Datumseingabe via TextFeld wird verworfen



## rtx05 (10. Jan 2011)

Hallo *,

ich verwende 


```
JDateChooser dcBirthday = new JDateChooser(null, null, "dd.MM.yyyy",new JSpinnerDateEditor());
```

Wenn ich ein Datum über den SpinnerDateEditor auswähle, wird das Datum im Textfeld angezeigt.

Wenn ich aber von Hand ins Textfeld z.B. 01.01.2011 (entspricht ja dem Format "dd.MM.yyyy") eintrage und das Feld verliert den Focus, wird das Feld geleert.

Jetzt vermute ich, das Problem ist *String <> Date* !

Wahrscheinlich müsste ich bei Focus-Verlust (oder allgm. beim PropertyChangeEvent) das Textfeld auslesen, parsen, ein Date-Objekt erzeugen und setzen.

Ich habe jedoch keine Ahnung, wie bzw. wo ich das umsetzen muss!

Kann mir da jemand einen Hinweis geben??


----------



## Gast2 (10. Jan 2011)

Woher kommt denn die Klasse JDateChooser???


----------



## rtx05 (10. Jan 2011)

JDateChooser ist Teil von JCalendar, was von Kai Tödter entwickelt wurde.
(Scheint eigentlich recht bekannt zu sein)


----------



## Gast2 (10. Jan 2011)

rtx05 hat gesagt.:


> JDateChooser ist Teil von JCalendar, was von Kai Tödter entwickelt wurde.
> (Scheint eigentlich recht bekannt zu sein)



Joa aber nicht Teil der JRE also solltest du schon sagen welchen JDateChooser du verwendest vielleicht ist es auch dein eigener...

Wenn ich die API anschaue
JDateChooser (JCalendar API)
find ich dein Konstruktor nämlich nicht...


----------



## rtx05 (10. Jan 2011)

Ja - sorry! Dachte der Toedter JDateChooser wäre schon quasi Standard und daher bekannt.

Also ich nehme die originalen Klassen (und habe keine eigenen gebaut)


```
import com.toedter.calendar.JDateChooser;
import com.toedter.calendar.JSpinnerDateEditor;
```

Hmm, die APIs auf der Homepage scheinen veraltet zu sein - dort steht Version:  1.2.1

Mein Download-Paket heisst jcalendar-1.3.3.zip (also vermtl. Version 1.3.3) und da gibt es den Konstruktor.


----------



## Gast2 (10. Jan 2011)

rtx05 hat gesagt.:


> Ja - sorry! Dachte der Toedter JDateChooser wäre schon quasi Standard und daher bekannt.



Wie kommst du darauf??? Es gibt auch noch swingx !!!


rtx05 hat gesagt.:


> Also ich nehme die originalen Klassen (und habe keine eigenen gebaut)
> 
> 
> ```
> ...



Schon mal die Idee gehabt die sourcen anzuschauen???
Im focus Lost wird einfach nichts gesetzt und darum gehts net wenn du die funkton willst brauchst einen eigenen Editor

```
import java.awt.BorderLayout;
import java.awt.event.FocusEvent;
import java.text.ParseException;
import java.util.Date;

import javax.swing.JFrame;
import javax.swing.JSpinner;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

import com.toedter.calendar.JCalendar;
import com.toedter.calendar.JDateChooser;
import com.toedter.calendar.JSpinnerDateEditor;

public class DateTest {

	public static void main(String[] args) {
		final JFrame frame = new JFrame("DateTest");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		JSpinnerDateEditor dateEditor = new MyJSpinnerDateEditor();
		dateEditor.setDateFormatString("dd.MM.yyyy");
		JDateChooser dcBirthday = new JDateChooser(dateEditor);
		dcBirthday.setDate(null);
		frame.add(dcBirthday);
		frame.add(new JTextField(), BorderLayout.SOUTH);
		frame.pack();
		SwingUtilities.invokeLater(new Runnable() {

			@Override
			public void run() {
				frame.setVisible(true);

			}
		});
	}

	private static class MyJSpinnerDateEditor extends JSpinnerDateEditor {

		@Override
		public void focusLost(FocusEvent focusEvent) {
			String text = ((JSpinner.DateEditor) getEditor()).getTextField()
					.getText();
			if (text.length() == 0) {
				setDate(null);
			} else {
				try {
					Date date = dateFormatter.parse(text);
					setDate(date, true);
				} catch (ParseException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}

			}

		}
	}
}
```


----------



## rtx05 (11. Jan 2011)

Danke schön! :toll:

Die Implementation von 
	
	
	
	





```
public void focusLost(FocusEvent focusEvent)
```
 ist genau das was ich gesucht habe.

Ich hatte mir die Demo-Samples mal angeschaut, bin da aber nicht ganz durchgestiegen, wann man die valueChanges-Property-Listener nimmt (und ob überhaupt, was sich ja hiermit als Holzweg herausgestellt hat).


----------



## Gast2 (11. Jan 2011)

rtx05 hat gesagt.:


> Danke schön! :toll:
> 
> Die Implementation von
> 
> ...



Du musst nicht unbedingt einen neuen Editor machen du kannst dem alten Editor auch einen FocusListener anhängen wie es dir lieber ist.


----------



## rtx05 (11. Jan 2011)

Dein Ansatz mit der eigenen Klasse ist ideal. 

Da habe ich schon wieder etwas über Komponenten gelernt und kann da noch einiges einbauen


----------

