Hallo liebe Leute!
Ich bin verwirrt!
Ich habe hier schon ein wenig im Forum gesucht und gelesen und das hat die Verwirrung erst so richtig komplett gemacht!
Ich habe folgendes vor:
Ein TableCellEditor, der je nach dem in welcher Spalte editiert wird nur Integer, Date oder ebend String zulässt. Die pasende Komponente zurückzuliefern ist kein Poblem. Ich habe drei JFormattedTextField-Objekte und es wird immer das richtige als Editor geliefert. Ich habe auch schon erreicht, dass (mit Hifle vom KeyListener) die Vordergrundfarbe rot oder grün wird, wenn die Eingabe "invalid" oder "valid" ist. Alles prima!
Das Problem ist folgendes: In meiner jetzigen Version wird alles was mit einem int beginnt als valid angenommen wird und was mit einem nicht-int anfängt als invalid gilt. Also wird z.B. "1sdfasfasFWEF$§" als valid akzeptiert. Nicht gut.
Ähnliches gilt für das Datumsfeld. Dort wird z.B. folgendes akzeptiert: "19.11.102121" oder "19.14.1001" oder "11.11.2002ab" ... ihr seht das Problem? Als invalid wird es allerdings erkannt, wenn ich sowas versuche: "a.11.2005" ... also ganz ohne Funktion ist es auch wieder nicht.
Jetzt fragt sich der Leser bestimmt wie ich denn dem JFormattedTextField erkläre was es machen soll. Jedenfalls würde ich mich das fragen ;-)
Hier kommt die Verwirrung ins Spiel. Ich habe hier im Forum und bei Sun und sonstwo im Netz die unterschiedlichsten Methoden gesehen, die aber alle entweder garnicht oder ebend wie beschrieben arbeiten. Dazu zählen die folgenden:
oder
oder
oder
Kann sein, das es noch mehr waren ... bin mit nicht 100% sicher. Den InputVerifier habe ich noch nicht getestet und die setDocument()-Geschichte ist auch ncoht nicht sooooo ganz das wahre.
Jedenfalls funktioniert nichts davon so richtig und ich bin mir auch nicht sicher, was das so alles den Unterschied machen soll.
An sich schien der MaskFormatter am Besten geeignet zu sein, aber da ist das Problem, dass ich ihn nicht dazu bringen konnte eine variable Menge von '#' zu akzeptieren, so dass zum Beispiel sowas rauskam: "123 " wenn die Maske "####" war.
Kann mir jemand sagen, wie ich das vrnünftig und möglichst simpel anstellen kann? Die Prüfung auf dd.MM.yyyy und auf Integer - ohne dass auch falsche Werte akzeptiert werden? Und zwar so, dass ich mit isValid() von JFormattedtTextField arbeiten kann. Also, dass man alles mögliche eingeben kann, es aber nur m richtigen Format als valid anerkannt wird... diese Arbeitsweise ist recht wichtig. Ich möchte also nicht unbedingt die Eingabe auf Ziffern beschränken.
Tut mir leid, wenn das schon oft gefragt wurde, aber ich komme mit den ganzen unterschiedlichen Ansätzen durcheinander und irgendwie halfen mir die gelesenen Beiträge auch nicht viel weiter.
Vielen Dank!
Gruß Sascha
Ich bin verwirrt!
Ich habe hier schon ein wenig im Forum gesucht und gelesen und das hat die Verwirrung erst so richtig komplett gemacht!
Ich habe folgendes vor:
Ein TableCellEditor, der je nach dem in welcher Spalte editiert wird nur Integer, Date oder ebend String zulässt. Die pasende Komponente zurückzuliefern ist kein Poblem. Ich habe drei JFormattedTextField-Objekte und es wird immer das richtige als Editor geliefert. Ich habe auch schon erreicht, dass (mit Hifle vom KeyListener) die Vordergrundfarbe rot oder grün wird, wenn die Eingabe "invalid" oder "valid" ist. Alles prima!
Das Problem ist folgendes: In meiner jetzigen Version wird alles was mit einem int beginnt als valid angenommen wird und was mit einem nicht-int anfängt als invalid gilt. Also wird z.B. "1sdfasfasFWEF$§" als valid akzeptiert. Nicht gut.
Ähnliches gilt für das Datumsfeld. Dort wird z.B. folgendes akzeptiert: "19.11.102121" oder "19.14.1001" oder "11.11.2002ab" ... ihr seht das Problem? Als invalid wird es allerdings erkannt, wenn ich sowas versuche: "a.11.2005" ... also ganz ohne Funktion ist es auch wieder nicht.
Jetzt fragt sich der Leser bestimmt wie ich denn dem JFormattedTextField erkläre was es machen soll. Jedenfalls würde ich mich das fragen ;-)
Hier kommt die Verwirrung ins Spiel. Ich habe hier im Forum und bei Sun und sonstwo im Netz die unterschiedlichsten Methoden gesehen, die aber alle entweder garnicht oder ebend wie beschrieben arbeiten. Dazu zählen die folgenden:
Code:
JFormattedTextField jftf = new JFormattedTextfield(new SimpleDateFormat("dd.MM.yyyy"));
oder
Code:
JFormattedTextField jftf = new JFormattedTextfield();
jftf.setValue(new Date());
oder
Code:
JFormattedTextField jftf = new JFormattedTextfield(new DateFormatter(DateFormat.getDateInstance(DateFormat.SHORT, Locale.GERMAN)));
oder
Code:
JFormattedTextField jftf = new JFormattedTextfield(new MaskFormatter("##.##.####"));
Kann sein, das es noch mehr waren ... bin mit nicht 100% sicher. Den InputVerifier habe ich noch nicht getestet und die setDocument()-Geschichte ist auch ncoht nicht sooooo ganz das wahre.
Jedenfalls funktioniert nichts davon so richtig und ich bin mir auch nicht sicher, was das so alles den Unterschied machen soll.
An sich schien der MaskFormatter am Besten geeignet zu sein, aber da ist das Problem, dass ich ihn nicht dazu bringen konnte eine variable Menge von '#' zu akzeptieren, so dass zum Beispiel sowas rauskam: "123 " wenn die Maske "####" war.
Kann mir jemand sagen, wie ich das vrnünftig und möglichst simpel anstellen kann? Die Prüfung auf dd.MM.yyyy und auf Integer - ohne dass auch falsche Werte akzeptiert werden? Und zwar so, dass ich mit isValid() von JFormattedtTextField arbeiten kann. Also, dass man alles mögliche eingeben kann, es aber nur m richtigen Format als valid anerkannt wird... diese Arbeitsweise ist recht wichtig. Ich möchte also nicht unbedingt die Eingabe auf Ziffern beschränken.
Tut mir leid, wenn das schon oft gefragt wurde, aber ich komme mit den ganzen unterschiedlichen Ansätzen durcheinander und irgendwie halfen mir die gelesenen Beiträge auch nicht viel weiter.
Vielen Dank!
Gruß Sascha