Prozedur einer Parent?-Klasse aufrufen

A

AlphaBeta2570

Hallo ihr,

folgende Situatuion:
1. Klasse
ist ein Java JFrame, also Fenster. Dieses stellt eine Funktion loadPanel(JPanel newPanel) zur Verfügung.

2. Klasse
ist ein JPanel. Dieses hat einen Button.

Was soll jetzt passieren?
Die 1. Klasse lädt das Fenster, instanziiert die 2. Klasse und lädt diese in ihr Fenster. Beim Klick auf den Button in der 2. Klasse soll nun die Funktion loadPanel(...) aufgerufen werden.

Frage?
Mit welchem Befehl kann ich die Funktion aufrufen?
 
Hi, mir würden jetzt 2 Möglichkeiten einfallen:

1. du registrierst den ActionListener in der der 1. Klasse und stellst in der 2. eine getJButton() zur verfügung, dann kannst du ohne Probleme auf deine Funktion zugreifen

2. du "hangelst" dich mit getParent() nach oben:

Code:
//Parent holen
Container cont = this.getParent();

//solange hoch hangeln bis ganz oben
while(cont != null) {								
    //wenn richtige Klasse, funktion ausführen und abbrechen
    if (cont instanceof 1.Klasse) {
	((1.Klasse)cont).loadPanel();
	return;
     } else {
                     cont = cont.getParent();
     }
}

Gruß Marci
 
Deine Lösung gefällt mir nicht ganz so gut, wegen des ganzen Gehangel und der Tatsache das loadPanel() mit dieser Methode public sein müsste. Und theoretisch ist gar nicht sichergestellt dass Klasse1 in der parent Hierarchie nur einmal vorkommt. Und somit wird dieses Hochhangeln zu einer möglichen Fehlerquelle.

Lieber ein ActionListener erstellen der auf die private Methoden der Klasse1 hat, z.B. als innere Klasse oder du Implementierst das Interface ActionListener direkt in Klasse!.

Und dann hast du drei Möglichkeiten:
  1. Du fügst deiner Klasse2 einfach die Methode addActionListener hinzu, die dann den Action Listener am Button registriert.
  2. Du übergibst den ActionListener im Konstruktor der Klasse2.
  3. Oder du Überlegst dir ob du Klasse2 überhaupt brauchst und erstellst Pannel und Button gleich in Klasse1.
 
Zuletzt bearbeitet:
Wie wär's, wenn du im Konstruktor von Klasse2 einen ActionListener als Parameter übergibst, den du vorher in Klasse1 definiert hast?
Java:
class Klasse1{
    ...
    ActionListener al = new ActionListener(){
        loadPanel();
    }
    public static void main(String [] args){ 
        JPanel p = new Klasse2(al);
        ...
    }
}
class Klasse2{
    ...
    public Klasse2(ActionListener al){
        JButton b = new JButton();
        b.addActionListener(al);
        add(b);
    }
    ...
}
//Edit: Eigentlich hat das Andibert ja schon gesagt... :D
 
Zuletzt bearbeitet:
Zurück