Hallo,
ich habe folgende konzeptionelle Frage:
Ich habe eine Gui Klasse, und eine Agentenklasse.
In der Gui klasse möchte ich nur Gui Elemente haben, in der Agentenklasse sind die Funktionen meines Programms abgebildet.
Wo muss ich nun z.B. einen ActionListener oder KeyListener implementieren, damit dieser auf Reaktionen aus der Gui mit den MEthoden aus der Agentenklasse reagiert?
Möglichkeit 1: Listener in der Gui Klasse:
Funktioniert an sich recht gut, ich erzeuge mir ein Objekt meines Agenten und greife auf die Methoden zu. Der Agent wiederum erzeugt ein Gui Objekt damit die Gui erscheint, da er ausführende Klasse ist. Stellt sich mir die Frage ob dies so sein soll, da ich "das GEfühl" kriege dass die Gui nun zu meiner "Hauptklasse" mutiert, und ob der Agent (der ja eigentlich der Kern des Programmes ist) dann noch ordnungsgemäß funktioniert wenn ich mir ein Objekt von ihm in meiner Gui erzeuge, denn der Agent erzeugt sich bei Bedarf z.B. auch mal selber.
Möglichkeit2: Listener in der Agenten Klasse:
In meiner Gui Klasse greife ich auf den Listener der Agentenklasse zu, ich füge in der Guiklasse z.b. Buttons den Listener über etwas wie button.addActionListener(Agent.Listener) hinzu - Listener ist in diesem Fall ein Objekt der inneren Klasse des ActionsListeners in der Agenten Klasse.
Dann habe ich meinen Agenten voll mit ListenerCode, stellt sich mir die Frage ob DAS Sinn der Sache ist, da der Agent sich übers Netzwerk bewegt, und erfahrungsgemäß (anscheinend) keine Objekte eigener Klassen (ich wollte eine seperate Funktionsklasse für den Agenten erstellen) mit übers Netz transportieren kann (auch nicht wenn diese serializable sind). Nun weiß ich nicht ob es klappt dass der Agent Listener Objekte mit sich nimmt...
Möglichkeit3: Listener in der Agenten Klasse Version 2:
Listener wieder in der Agenten Klasse jedoch nicht aufgerufen aus der Gui sondern Gui-Elemente aufgerufen aus der Agentenklasse und deren Listener hinzugefügt: gui.button1.addAction...()..
Geht natürlich nur wenn diese Gui Elemente visible sind...ob das so gut ist?

Kann mir jemand ne Möglichkeit nennen wie man sowas "normalerweise" anständig und sauber machen würde?
Bis jetzt bin ich dieses Problem nahezu immer dadurch umgangen, dass ich Funktionen in die Guiklasse mit eingebaut habe und diese dann einfach direkt dadrinnen mit den eigenen Listenern aufgerufen habe - das ist natürlich nicht schön, denn dann ist die Guiklasse keine Guiklasse mehr, sondern eine Allround-Klasse...
hm ja, danke schonmal
ich habe folgende konzeptionelle Frage:
Ich habe eine Gui Klasse, und eine Agentenklasse.
In der Gui klasse möchte ich nur Gui Elemente haben, in der Agentenklasse sind die Funktionen meines Programms abgebildet.
Wo muss ich nun z.B. einen ActionListener oder KeyListener implementieren, damit dieser auf Reaktionen aus der Gui mit den MEthoden aus der Agentenklasse reagiert?
Möglichkeit 1: Listener in der Gui Klasse:
Funktioniert an sich recht gut, ich erzeuge mir ein Objekt meines Agenten und greife auf die Methoden zu. Der Agent wiederum erzeugt ein Gui Objekt damit die Gui erscheint, da er ausführende Klasse ist. Stellt sich mir die Frage ob dies so sein soll, da ich "das GEfühl" kriege dass die Gui nun zu meiner "Hauptklasse" mutiert, und ob der Agent (der ja eigentlich der Kern des Programmes ist) dann noch ordnungsgemäß funktioniert wenn ich mir ein Objekt von ihm in meiner Gui erzeuge, denn der Agent erzeugt sich bei Bedarf z.B. auch mal selber.
Möglichkeit2: Listener in der Agenten Klasse:
In meiner Gui Klasse greife ich auf den Listener der Agentenklasse zu, ich füge in der Guiklasse z.b. Buttons den Listener über etwas wie button.addActionListener(Agent.Listener) hinzu - Listener ist in diesem Fall ein Objekt der inneren Klasse des ActionsListeners in der Agenten Klasse.
Dann habe ich meinen Agenten voll mit ListenerCode, stellt sich mir die Frage ob DAS Sinn der Sache ist, da der Agent sich übers Netzwerk bewegt, und erfahrungsgemäß (anscheinend) keine Objekte eigener Klassen (ich wollte eine seperate Funktionsklasse für den Agenten erstellen) mit übers Netz transportieren kann (auch nicht wenn diese serializable sind). Nun weiß ich nicht ob es klappt dass der Agent Listener Objekte mit sich nimmt...
Möglichkeit3: Listener in der Agenten Klasse Version 2:
Listener wieder in der Agenten Klasse jedoch nicht aufgerufen aus der Gui sondern Gui-Elemente aufgerufen aus der Agentenklasse und deren Listener hinzugefügt: gui.button1.addAction...()..
Geht natürlich nur wenn diese Gui Elemente visible sind...ob das so gut ist?
Kann mir jemand ne Möglichkeit nennen wie man sowas "normalerweise" anständig und sauber machen würde?
Bis jetzt bin ich dieses Problem nahezu immer dadurch umgangen, dass ich Funktionen in die Guiklasse mit eingebaut habe und diese dann einfach direkt dadrinnen mit den eigenen Listenern aufgerufen habe - das ist natürlich nicht schön, denn dann ist die Guiklasse keine Guiklasse mehr, sondern eine Allround-Klasse...
hm ja, danke schonmal