Fenster A soll Fenster B schliessen

Interholic

Mitglied
hallo,

ich hätte mal eine theoretische Frage:

ich habe ein programm das fenster a generiert. von dort kann aus einer zusätzlichen klasse fenster b geöffnet werden. das 2. fenster wird üblicherweise per DISPOSE_ON_CLOSE geschlossen. da es aber nicht modal ist (der gleichzeitige zugriff auf beide fenster soll möglich sein), kann ich dieses mehrmals öffnen - aber genau das soll nicht passieren.

plan a:
ich habe das 2. fenster immer parallel zum hauptfenster und blende es nur ein und aus (HIDE_ON_CLOSE). aber mal ehrlich... sieht nach 'ner notlösung aus, oder? ;-)

diesen plan habe ich erstmal verworfen...

plan b:
bevor ich das 2. fenster öffne, wird es grundsätzlich erstmal geschlossen um es im anschluss gleich wieder zu öffnen. sollte dafür sorgen das es nur 1x existiert, statt x-mal. klingt auch nicht professionell, aber damit könnte ich leben.

dazu finde ich leider keinen hinweis, wie ich aus fenster a fenster b schliessen kann.

plan c:
ich frage vor dem öffnen des 2. fenster ab, ob es bereits geöffnet ist. wenn ja, öffne ich es nicht erneut. klingt nach der saubersten lösung.

geht das überhaupt? vermutlich schon, aber auch dazu finde ich nichts...


kann mich bitte mal jemand in die richtige richtung schubsen? ;-)

danke!


gruss,
inter
 
Ich habe gerade nur wenig Zeit, daher mache ich es kurz und ganz ohne Beispiel:
Plan C realisierst du, indem du eine boolesche Variable isSecWindowOpen anlegst und nach dem ersten Öffnen diese auf true setzt. Wenn die Variable auf true steht, dann führt dein Öffnen-Button in Fenster a nichts aus und wenn du Fenster b schließt, dann setzt du diese Variable per setter-Methode auf false zurück.
 
klasse idee!

vielen dank...

zwar funktioniert mein setter noch nicht richtig (befindet sich in klasse a und ist von klasse b noch nicht erreichbar), aber sowas hab ich schonmal gemacht und es funktionierte (war halt "andersrum", sollte aber doch kein unterschied sein).

ich "bastel" mal noch etwas rum...

danke nochmal...


gruss,
inter
 
Hallo Interholic,

der Setter muss public sein und du musst eine Referenz auf das Fenster a an Fenster b übergeben. Fenster b sollte also im Konstruktor Fenster a übergeben bekommen. Dann kannst du von Fenster b aus die Methoden von Fenster a aufrufen.

Grüße
VirtualIndex
 
Evtl. macht es auch Sinn, sowas genereller zu entwickeln? Wieso Fenster A und B damit belasten? Das sind ja eigentlich keine wirklichen Aufgaben der jeweiligen Fenster. Es geht hier doch eher um eine Art FensterManager. Also kannst Du z.B. einen FensterManager als Klasse schreiben. Über Singleton Pattern oder einfach statische Funktionen / Variablen kann das dann jedes Fenster selbst nutzen.

Dann kann man sich überlegen, wie das Design sein soll. Evtl. übernimmt der Fenster Manager das Öffnen von Fenstern. Dann wird halt kein Fenster mehr direkt geöffnet sondern das geht dann alles über Aufrufe im FensterManager. Dann kann FensterManager auch prüfen, ob es schon eine Instanz gibt und was der Status des Fensters ist.
Evtl. leitest Du da auch Deine Fenster von einem ManagedWindow ab oder so. Da wäre dann evtl. noch weiterer Code drin, der sicher stellt, dass eben beim schließen des Fensters dieses auch im FensterManager vermerkt wird oder so. Hätte dann ggf. den Vorteil, dass man bestehende Programme auch leicht umstellen könnte.

Das aber nur als kleine Denkanregung, ob nicht ein objektorientierter Ansatz besser sein könnte. Da ich mich nicht im Detail mit den Anforderungen beschäftigt habe, möchte ich nicht mehr als eine Denkanregung weiter geben.
 
@VirtualIndex:

nochmals vielen dank!

auch für deine ergänzenden infos. mein setter ist 'public'. aber ich kämpfe momentan mehr mit dem dazugehörigen konstruktor. durch die referenzübergabe - glaube ich - nicht mit dem einfachen hinzukommen, sondern benötige wohl den überladenen. entweder hab' ich das system noch nicht wirklich verstanden oder habe einen blöden denkfehler durch meine umgedrehte 'reihenfolge' (konstruktor in klasse b/fenster b mit referenz auf klasse a/fenster a).

ich büffel wohl nochmal die theorie... ;-)


@kneitzel:

auch dir dank für deine anregung!

ich fürchte nur, dass sie meine derzeitigen fähigkeiten noch übersteigt. ABER ich hab' verstanden was du meintest und es klingt nach einer echt guten idee, die ich im hinterkopf behalten werde.

einerseits weiss ich 'übung macht den meister'! andererseits möchte man ja vermeiden immer wieder dieselben routinen zu coden. das wäre so ein windowsmanager sicherlich ziemlich hilfreich. 🙂

wenn ich soweit bin, werde ich mich da ganz bestimmt mal dransetzen und ggf. auf dich zurückkommen... ;-))


gruss,
inter
 

Zurück
Oben