Hallo!
Ich habe folgendes Design-Problem:
Ziel ist eine Anwendung mit RMI, Datenbankanbindung und so.
Aus einer Datenbank hole ich Tabellen. Da ich das ResultSet nicht über RMI transportieren kann, habe ich dafür folgende Lösung:
Ich habe später auf Server und Client in einem package Klassen wie z.B.
BeanKunde (stellt Datensätze aus der Datenbank-Tabelle tblKunde als Objekte dar und hat dazu nur Getter und Setter)
BeanAuftrag (stellt Datensätze aus der Datenbank-Tabelle tblAuftrag als Objekte dar und hat dazu nur Getter und Setter)
...
Auf dem Server werden Datensätze aus der Datenbank geholt und das ResultSet in ein Array z.B. aus BeanKunde-Objekten "umgewandelt". Dieses wird dann an den Client weitergereicht, der das ganze in einer Tabelle darstellen soll.
Nun bin ich dabei, mir ein eigenes TableDataModel zu schreiben, dessen Konstruktor aus einem Bean-Array ein Object-Array für die JTable machen soll.
Ich möchte aber nicht für jede einzelne Klasse BeanKunde, BeanAuftrag, etc. einen eigenen Konstruktor machen, sondern statt dessen eine Super-Klasse "Bean" als Parameter für den Konstruktor übergeben, der das alles irgendwie (!) mit einem Schlag erledigt.
Derzeit überlege ich, wie ich die Spaltenüberschriften der JTable erstellen kann. Meine Idee war, in jeder BeanXXX-Klasse ein statisches String-Array zu haben, in dem die Spaltenüberschriften enthalten sind.
Jetzt fängt die Problematik an: Ich habe den ganzen Tag rumgewurschtelt und hin und her überlegt, aber mir fällt keine Lösung für die Sache ein. Meine bisherigen Ansätze:
1. Super-Klasse "Bean" (abstract), mit einer statischen Methode "getHeader(int column)", welche aus den davon abgeleiteten Klassen BeanKunde etc. die Spaltenüberschriften zurückgibt. Ich möchte diese Methode - getHeader - die für jede Bean gleich aussieht, nicht in jeder Klasse stehen haben. (Funktioniert nicht, anscheinend hat mir das static Probleme gemacht?).
2. Bei der JTable mit InstanceOf arbeiten (funktioniert zwar, aber lästig wegen Fallunterscheidung für jede einzelne Bean).
Ergo: Ich möchte das das ganze auch noch läuft, wenn ich mal eine neue Bean-Klasse erstelle, mag dann nicht überall im Code was ändern müssen.
Auf jeden Fall steh ich ziemlich auf dem Schlauch und komm einfach nicht weiter.
Vielleicht hat von Euch jemand ne Idee? Wäre super...
Liebe Grüße, Sabine
Ich habe folgendes Design-Problem:
Ziel ist eine Anwendung mit RMI, Datenbankanbindung und so.
Aus einer Datenbank hole ich Tabellen. Da ich das ResultSet nicht über RMI transportieren kann, habe ich dafür folgende Lösung:
Ich habe später auf Server und Client in einem package Klassen wie z.B.
BeanKunde (stellt Datensätze aus der Datenbank-Tabelle tblKunde als Objekte dar und hat dazu nur Getter und Setter)
BeanAuftrag (stellt Datensätze aus der Datenbank-Tabelle tblAuftrag als Objekte dar und hat dazu nur Getter und Setter)
...
Auf dem Server werden Datensätze aus der Datenbank geholt und das ResultSet in ein Array z.B. aus BeanKunde-Objekten "umgewandelt". Dieses wird dann an den Client weitergereicht, der das ganze in einer Tabelle darstellen soll.
Nun bin ich dabei, mir ein eigenes TableDataModel zu schreiben, dessen Konstruktor aus einem Bean-Array ein Object-Array für die JTable machen soll.
Ich möchte aber nicht für jede einzelne Klasse BeanKunde, BeanAuftrag, etc. einen eigenen Konstruktor machen, sondern statt dessen eine Super-Klasse "Bean" als Parameter für den Konstruktor übergeben, der das alles irgendwie (!) mit einem Schlag erledigt.
Derzeit überlege ich, wie ich die Spaltenüberschriften der JTable erstellen kann. Meine Idee war, in jeder BeanXXX-Klasse ein statisches String-Array zu haben, in dem die Spaltenüberschriften enthalten sind.
Jetzt fängt die Problematik an: Ich habe den ganzen Tag rumgewurschtelt und hin und her überlegt, aber mir fällt keine Lösung für die Sache ein. Meine bisherigen Ansätze:
1. Super-Klasse "Bean" (abstract), mit einer statischen Methode "getHeader(int column)", welche aus den davon abgeleiteten Klassen BeanKunde etc. die Spaltenüberschriften zurückgibt. Ich möchte diese Methode - getHeader - die für jede Bean gleich aussieht, nicht in jeder Klasse stehen haben. (Funktioniert nicht, anscheinend hat mir das static Probleme gemacht?).
2. Bei der JTable mit InstanceOf arbeiten (funktioniert zwar, aber lästig wegen Fallunterscheidung für jede einzelne Bean).
Ergo: Ich möchte das das ganze auch noch läuft, wenn ich mal eine neue Bean-Klasse erstelle, mag dann nicht überall im Code was ändern müssen.
Auf jeden Fall steh ich ziemlich auf dem Schlauch und komm einfach nicht weiter.
Vielleicht hat von Euch jemand ne Idee? Wäre super...
Liebe Grüße, Sabine