Ganon
2007-03-19, 21:08:47
Hallo.
Kann sein das ich jetzt auch großen Blödsinn rede, also schon mal vorab -> Sorry
Naja. Ich möchte mal gerne meine Vorgehensweise erklären, um mal nachzufragen, ob ich gerade großen Mist fabriziere oder ob das schon so in Ordnung geht. Ich habe nämlich so meine Zweifel, da ich in Java eher noch Anfänger bin.
Also die GUI wird ganz normal mit Swing erstellt. Jedes Element (JTextField, JButton, usw.) landet dann in einer HashMap. Dann werden in einer Schleife Standard-Eigenschaften gesetzt wie Listener hinzugefügen, Name setzen usw.
Dann haben JTextFields ja ein Document als Model. Dort kann ich ja Properties definieren, mit putProperty. Dort schreibe ich dann rein, welche Tabelle und welches Feld. Also z.B.
jTextField1.getDocument().putProperty("table","adressen");
jTextField1.getDocument().putProperty("tableField","tstrasse");
So. Die Tabellen-Daten lese ich mir dann in ein Model ein. Hier jetzt z.B. mit
SELECT * FROM adressen
lade ich mir die Daten in einen 2D Vector. Die Überschriften auch. Entsprechende Getter/Setter sind vorhanden um an die Daten ran zu kommen und um sie auch wieder schreiben zu können.
Die beiden Sachen habe ich dann mit einer Controller-Klasse verbunden, welche über das Observer-Pattern Änderungen mitbekommt. Das GUI aktualisiert dann alle Text-Felder über die Update-Routine. Ich laufe dann ganz normal durch die Hashmap und setze mit setText die neuen Werte. Ich übergebe dazu dem Controller die Referenz zum Textfeld, welcher dann die Propertys ausliest und die entsprechenden Daten aus dem Model holt. Genauso läuft es denn mit Aktualisierungen. Es wird einfach das Textfeld übergeben und dann macht das ganze Zeug dahinter den Rest anhand der Informationen aus dem Document.
Das Ganze habe ich jetzt über General-Methoden/Klassen gemacht, so das für jedes Textfeld das gleiche Handling ist und ich so nicht jedes Textfeld einzeln behandeln muss (viele viele Textfelder ). Wenn ich jetzt aber ein Textfeld gesondert behandeln muss, rufe ich über dynamische Methoden-Aufrufe die Funktion (werden immer aufgerufen, wenn nicht vorhanden, passiert nix):
<Objektname>_<Ereignis>() auf.
Also wenn ich z.B. einen valueChange mitbekommen würde, dann rufe ich aus der Methoden-Klasse:
txtStrasse_valueChange()
auf. Ein valueChange wäre ja eine Änderungen im Document, welche eine folgende FocusLost zur folge hat. So wird sie nicht bei jedem Tastendruck aufgerufen. Genauso mache ich das auch mit Schalten, etc.
Bisher klappt das auch alles momentan bestens. Momentan überlege ich wie ich das Ganze noch auf Tabellen ausweiten kann und wie ich es ggf. noch erweitern/vereinfachen kann.
Nunja. Nun ist meine Frage, ob Java hier nicht ggf. schon Sachen bietet um mir das Ganze zu vereinfachen, oder ob ich hier mit offenen Armen gegen eine Wand renne. Klar. Momentan klappt alles, aber wenn ich mit 200 km/h auf eine Wand zufahre, klappt auch alles, bis ich bei der Wand bin.
Ich hoffe ihr konntet mir folgen und ich würde mich über Kommentare freuen
Schönen Abend noch.
Kann sein das ich jetzt auch großen Blödsinn rede, also schon mal vorab -> Sorry
Naja. Ich möchte mal gerne meine Vorgehensweise erklären, um mal nachzufragen, ob ich gerade großen Mist fabriziere oder ob das schon so in Ordnung geht. Ich habe nämlich so meine Zweifel, da ich in Java eher noch Anfänger bin.
Also die GUI wird ganz normal mit Swing erstellt. Jedes Element (JTextField, JButton, usw.) landet dann in einer HashMap. Dann werden in einer Schleife Standard-Eigenschaften gesetzt wie Listener hinzugefügen, Name setzen usw.
Dann haben JTextFields ja ein Document als Model. Dort kann ich ja Properties definieren, mit putProperty. Dort schreibe ich dann rein, welche Tabelle und welches Feld. Also z.B.
jTextField1.getDocument().putProperty("table","adressen");
jTextField1.getDocument().putProperty("tableField","tstrasse");
So. Die Tabellen-Daten lese ich mir dann in ein Model ein. Hier jetzt z.B. mit
SELECT * FROM adressen
lade ich mir die Daten in einen 2D Vector. Die Überschriften auch. Entsprechende Getter/Setter sind vorhanden um an die Daten ran zu kommen und um sie auch wieder schreiben zu können.
Die beiden Sachen habe ich dann mit einer Controller-Klasse verbunden, welche über das Observer-Pattern Änderungen mitbekommt. Das GUI aktualisiert dann alle Text-Felder über die Update-Routine. Ich laufe dann ganz normal durch die Hashmap und setze mit setText die neuen Werte. Ich übergebe dazu dem Controller die Referenz zum Textfeld, welcher dann die Propertys ausliest und die entsprechenden Daten aus dem Model holt. Genauso läuft es denn mit Aktualisierungen. Es wird einfach das Textfeld übergeben und dann macht das ganze Zeug dahinter den Rest anhand der Informationen aus dem Document.
Das Ganze habe ich jetzt über General-Methoden/Klassen gemacht, so das für jedes Textfeld das gleiche Handling ist und ich so nicht jedes Textfeld einzeln behandeln muss (viele viele Textfelder ). Wenn ich jetzt aber ein Textfeld gesondert behandeln muss, rufe ich über dynamische Methoden-Aufrufe die Funktion (werden immer aufgerufen, wenn nicht vorhanden, passiert nix):
<Objektname>_<Ereignis>() auf.
Also wenn ich z.B. einen valueChange mitbekommen würde, dann rufe ich aus der Methoden-Klasse:
txtStrasse_valueChange()
auf. Ein valueChange wäre ja eine Änderungen im Document, welche eine folgende FocusLost zur folge hat. So wird sie nicht bei jedem Tastendruck aufgerufen. Genauso mache ich das auch mit Schalten, etc.
Bisher klappt das auch alles momentan bestens. Momentan überlege ich wie ich das Ganze noch auf Tabellen ausweiten kann und wie ich es ggf. noch erweitern/vereinfachen kann.
Nunja. Nun ist meine Frage, ob Java hier nicht ggf. schon Sachen bietet um mir das Ganze zu vereinfachen, oder ob ich hier mit offenen Armen gegen eine Wand renne. Klar. Momentan klappt alles, aber wenn ich mit 200 km/h auf eine Wand zufahre, klappt auch alles, bis ich bei der Wand bin.
Ich hoffe ihr konntet mir folgen und ich würde mich über Kommentare freuen
Schönen Abend noch.