Problem, this als parent zu übergeben



  • Hallo,

    ich hab ein kleines Designproblem:

    Ich benutze SWT, aber ich glaube, das hier ist allgemeingültig. Bei mir gibt's verschiedene Arten von Fenstern: Hauptfenster (sollte es eigentlich nur eins geben), mehrere "normale" Fenster. Beim Programmstart soll das Hauptfenster geöffnet werden. Im Hauptfenster gibt's Buttons, die neue Fenster öffnen. Ein normales Fenster soll das Hauptfenster "deaktivieren", so dass das Hauptfenster erst wieder benutzt werden kann, wenn das Unterfenster geschlossen wird. Bis jetzt sieht's so aus:

    In der Main-Methode:

    final Display display = new Display();
    GuiHauptfenster hauptfenster = new GuiHauptfenster(display);
    hauptfenster.starten();
    

    In Hauptfenster.java:

    public class GuiHauptfenster{
    
       private Shell shell;
       private Display display;
    
       public GuiHauptfenster(Display _display){
          shell = new Shell(display);
          display = _display;
       }
    
       public void starten() {
          ...
          SelectionListener listenerButtonOptionen = new SelectionListener() {
             public void widgetSelected(SelectionEvent e) {
                shell.setEnabled(false);  // Deaktiviert die aktuelle Shell
                GuiOptionenFenster optionenFenster = new GuiOptionenFenster(display);
                optionenFenster.starten();
             }
    
             public void widgetDefaultSelected(SelectionEvent e) {
             }
          };
       ...
    }
    

    Im Optionen Fenster:

    ...
    public void starten(){
       shell.setSize(400, 300);
       shell.open();
    
       while (!shell.isDisposed()) {
          if (!display.readAndDispatch()) {
             display.sleep();
          }
       //Hier müsste die übergeordnete Shell wieder freigegeben werden
       }
    }
    

    Nur komm ich ja vom neuen Fenster aus nicht mehr an die shell des ursprünglichen ran, um sie wieder zu aktivieren. Ich hab überlegt, dass ich an Fenster jeweils optional eine Art Parent weitergeben könnte. Aber die Fenster sind ja evtl. unterschiedliche Klassen. Meine Versuche, eine Fenster-Oberklasse zu definieren, die ich dann als Parent übergebe, sind leider fehlgeschlagen.

    Kann mir jemand sagen, ob das überhaupt ein vernünftiger Weg wäre? Oder macht man das besser anders? Ich bin für jeden Tipp dankbar.



  • Ups, ich sehe gerade, dass der Titel leider überhaupt nicht zum Betrag passt. Hintergrund ist, dass ich bei meinem Konstrukt am "this" gescheitert bin, weil es nicht der richtige Typ zu sein schien. Generell würd mich aber erst mal interessieren, ob die Art und Weise überhaupt ok ist, wie ich das ganze realisieren will.



  • Habs einigermaßen gelöst. Problematisch war, dass ich im Listener nicht this für's Objekt verwenden konnte, zu dem der Listener gehört. Also konnte ich das Objekt auch nicht durch den Listener als Parameter übergeben (Als Parent). Ich hab jetzt einfach die zum Objekt gehörende Shell als Parent übergeben.


Anmelden zum Antworten