Hallo,
folgende Situation, zur Veranschaulichung möglichst einfach dargestellt:
Ich habe eine Benutzeroberfläche mit einem Button. Dieser Button soll auf einen Klick reagieren. Zu diesem Zweck füge ich ihm einen Eventlistener hinzu. Der Handler dafür soll in eine externe Klasse, da er relativ viel Programmlogik enthält und daher aus Gründen der sauberen Programmierung von der GUI getrennt werden soll.
In diesem Handler will ich auf verschiedene Elemente (Textfelder, Listen...) der Benutzeroberfläche zugreifen. Diese Elemente sind im Eventhandler natürlich erst mal nicht zugänglich. Jetzt habe ich überlegt, wie ich das anstellen könnte, aber habe keine Methode gefunden die mich wirklich zufriedenstellt:
1. Die betreffenden Steuerelemente in der Formularklasse als statisch definieren, dann der GUI-Klasse entsprechende statische get-Methoden hinzufügen. Dann kann ich im Handler so darauf zugreifen: TestForm.getInfoTextField().getText()
Diese Lösung ist deshalb nicht so gut, weil die Steuerelemente eigentlich nicht statisch sein sollen. Vielleicht soll es ja mehrere Instanzen der Formularklasse(n) geben.
2. Der Formularklasse get-Methoden für die Formulare hinzufügen und dann dem Eventhandler eine Instanz der Formularklasse im Konstruktor übergeben.
Funktioniert an sich gut, aber was ist, wenn ich im Eventhandler auch noch auf andere Formulare zugreifen will als die, die den Eventlistener angemeldet haben? Es kann sein, dass von diesen Formularen noch gar keine Instanz vorhanden ist, wenn ich den Eventlistener anmelde, also kann ich diese Formulare nicht dem Eventhandler übergeben.
3. Formulare als Singleton-Klassen definieren und dann im Eventhandler die jeweilige Instanz abholen
Funktioniert an sich auch gut, aber hat wiederum die Limitierung, dass es nur eine Instanz jedes Formulares geben kann.
4. Die Steuerelemente direkt dem Konstruktor des Eventhandlers übergeben
Auch eine Möglichkeit, ist aber inakzeptabel, wenn eine große Anzahl von Steuerelementen zugänglich gemacht werden sollen.
Also das sind die Möglichkeiten die mir bisher eingefallen sind. Vielleicht sind auch einige davon völlig verpönt oder ungebräuchlich, aber ich tue mich echt schwer eine Lösung zu finden. Es soll auch nicht einfach nur funktionieren, sondern möglichst elegant und effizient gelöst werden.
folgende Situation, zur Veranschaulichung möglichst einfach dargestellt:
Ich habe eine Benutzeroberfläche mit einem Button. Dieser Button soll auf einen Klick reagieren. Zu diesem Zweck füge ich ihm einen Eventlistener hinzu. Der Handler dafür soll in eine externe Klasse, da er relativ viel Programmlogik enthält und daher aus Gründen der sauberen Programmierung von der GUI getrennt werden soll.
In diesem Handler will ich auf verschiedene Elemente (Textfelder, Listen...) der Benutzeroberfläche zugreifen. Diese Elemente sind im Eventhandler natürlich erst mal nicht zugänglich. Jetzt habe ich überlegt, wie ich das anstellen könnte, aber habe keine Methode gefunden die mich wirklich zufriedenstellt:
1. Die betreffenden Steuerelemente in der Formularklasse als statisch definieren, dann der GUI-Klasse entsprechende statische get-Methoden hinzufügen. Dann kann ich im Handler so darauf zugreifen: TestForm.getInfoTextField().getText()
Diese Lösung ist deshalb nicht so gut, weil die Steuerelemente eigentlich nicht statisch sein sollen. Vielleicht soll es ja mehrere Instanzen der Formularklasse(n) geben.
2. Der Formularklasse get-Methoden für die Formulare hinzufügen und dann dem Eventhandler eine Instanz der Formularklasse im Konstruktor übergeben.
Funktioniert an sich gut, aber was ist, wenn ich im Eventhandler auch noch auf andere Formulare zugreifen will als die, die den Eventlistener angemeldet haben? Es kann sein, dass von diesen Formularen noch gar keine Instanz vorhanden ist, wenn ich den Eventlistener anmelde, also kann ich diese Formulare nicht dem Eventhandler übergeben.
3. Formulare als Singleton-Klassen definieren und dann im Eventhandler die jeweilige Instanz abholen
Funktioniert an sich auch gut, aber hat wiederum die Limitierung, dass es nur eine Instanz jedes Formulares geben kann.
4. Die Steuerelemente direkt dem Konstruktor des Eventhandlers übergeben
Auch eine Möglichkeit, ist aber inakzeptabel, wenn eine große Anzahl von Steuerelementen zugänglich gemacht werden sollen.
Also das sind die Möglichkeiten die mir bisher eingefallen sind. Vielleicht sind auch einige davon völlig verpönt oder ungebräuchlich, aber ich tue mich echt schwer eine Lösung zu finden. Es soll auch nicht einfach nur funktionieren, sondern möglichst elegant und effizient gelöst werden.