Mit ActionListener in anderem Frame lauschen?

Status
Nicht offen für weitere Antworten.

zuckerbrot

Mitglied
Hallo, ich habe mal wieder ein kleines Problem, bei dem ihr mir hoffentlich helfen könnt.

Folgende Struktur:

Ich habe ein Hauptprogramm, aus dem ich mir ein kleines Eingabefenster (Frame "Abfrage") öffne
Java:
Abfrage myAbfrage = new Abfrage();
myAbfrage.setVisible(true);

In dem Abfrage-Frame gibt es u.a. einen OK-Button, zu dem es dort auch einen ActionListener gibt, in dem ein paar Aktionen durchgeführt werden. Mein Problem ist nun folgendes: Nachdem der OK-Button im Abfragefenster betätigt wurde, soll mein Hauptprogramm eine Aktion durchführen. Ich muss also irgendwie im Hauptprogramm mitbekommen, wenn der OK-Button im Abfragefenster betätigt wurde. Wie kann ich das tun?

Ich hatte erst den umgekehrten Weg im Sinn, also aus dem Abfragefenster heraus eine Methode des Hauptprogramms aufrufen, aber das funktioniert nicht wegen
"non-static method ... cannot be referenced from a static context"
Und die Methode im Hauptrogramm static zu machen, ist auch keine Option, da da zu viele Variablen und Methoden dranhängen, die ich dann auch alle static machen müsste.

Kann ich mir im Hauptprogramm einen ActionListener basteln, der auf den OK-Button im Abfragefenster reagiert oder sowas? Wie müsste das dann aussehen?

Vielen Dank vorab 🙂
 
moeglichkeit 1:

Java:
public class Foo() {
    public void start() {
       Abfrage myAbfrage = new Abfrage(this);
       myAbfrage.setVisible(true);
    }

    public void doIt() {
      // mach was
   }
}

public class Abfrage {
    private Foo foo;

    public Abfrage(Foo foo) {
      this.foo = foo;
    }

    // irgendwo dann im ActionListener
    // foo.doIt();
}

Moeglichkeit 2:
Java:
public class Foo() {
    public void start() {
       ActionListener l = new ActionListener(); // mit dem ganzen summs -> ruft bei actionPerformed doIt auf
       Abfrage myAbfrage = new Abfrage(l);
       myAbfrage.setVisible(true);
    }

    public void doIt() {
      // mach was
   }
}

public class Abfrage {
    private ActionListener buttonListener;

    public Abfrage(ActionListener l) {
      buttonListener = l;
    }

    // irgendwo dann im Button
   // button.addActionListener(buttonListener);
}
 
Generell würde ich für das Abfragefenster einen (evtl. modalen) JDialog verwenden. Abhängig davon was Du vorhast. z.B. Kann man auf das Schliessen des Dialogs warten und dann entsprechend im Programm weiter verfahren oder man kann dem Dialog/Frame bei entsprechender Implementierung einen ActionListener mitgeben.
Soll das Hauptprogramm im Hintergrund "weiterlaufen" oder muss es auf eine Rückmeldung aus dem Abfragefenster warten?
Beschreibe mal was Du genau vorhast.
 
Das Hauptprogramm soll auf eine Rückmeldung aus dem Abfragefenster warten. Ich habe jetzt die 2. Möglichkeit von bygones verwendet und damit läuft es so, wie ich mir das vorgestellt hatte 🙂
Vielen Dank!
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben