1Danke
ERLEDIGT
NEIN
NEIN
ANTWORTEN
4
4
ZUGRIFFE
1726
1726
EMPFEHLEN
-
02.12.09 08:56 #1AlphaBeta2570 Tutorials.de Gastzugang
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?
-
02.12.09 11:07 #2Marci- Tutorials.de Gastzugang
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 :1 2 3 4 5 6 7 8 9 10 11 12 13
//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:- Du fügst deiner Klasse2 einfach die Methode addActionListener hinzu, die dann den Action Listener am Button registriert.
- Du übergibst den ActionListener im Konstruktor der Klasse2.
- Oder du Überlegst dir ob du Klasse2 überhaupt brauchst und erstellst Pannel und Button gleich in Klasse1.
Geändert von Andibert (06.12.09 um 14:07 Uhr)
There are 10 kind of people, those who understand binary and those who don't.
-
06.12.09 14:40 #4
Wie wär's, wenn du im Konstruktor von Klasse2 einen ActionListener als Parameter übergibst, den du vorher in Klasse1 definiert hast?
//Edit: Eigentlich hat das Andibert ja schon gesagt...Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
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); } ... }
Geändert von Jellysheep (06.12.09 um 14:44 Uhr)
-
17.02.10 18:34 #5hansdampf1234 Tutorials.de Gastzugang
Ähnliche Themen
-
OOP: Methode einer anderen Klasse aufrufen
Von Roumeo im Forum PHPAntworten: 3Letzter Beitrag: 31.10.08, 23:05 -
von einer Klasse die Methode einer anderen aufrufen
Von JRookie im Forum JavaAntworten: 1Letzter Beitrag: 08.03.08, 03:45 -
Selbsterstellte Prozedur aufrufen
Von shader09 im Forum C/C++Antworten: 1Letzter Beitrag: 26.10.07, 15:04 -
Click Prozedur innerhalb einer anderen Prozedur aufrufen?!
Von Blaubmania im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 21.09.06, 12:55 -
Funktion einer nicht instanzierten Klasse aufrufen
Von lordfritte im Forum PHPAntworten: 5Letzter Beitrag: 15.04.06, 15:12





Zitieren
Login





