tutorials.de Buch-Aktion 05/2012
Like Tree1Danke
  • 1 Beitrag von Jellysheep
ERLEDIGT
NEIN
ANTWORTEN
4
ZUGRIFFE
1726
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    AlphaBeta2570 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?
     

  2. #2
    Marci- 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
     

  3. #3
    Andibert Andibert ist offline Mitglied Silber
    Registriert seit
    Sep 2006
    Ort
    Hildesheim
    Beiträge
    90
    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.
    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.

  4. #4
    Avatar von Jellysheep
    Jellysheep Jellysheep ist offline Mitglied Platin
    Registriert seit
    Jan 2009
    Ort
    Arbeitsspeicher
    Beiträge
    689
    Wie wär's, wenn du im Konstruktor von Klasse2 einen ActionListener als Parameter übergibst, den du vorher in Klasse1 definiert hast?
    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);
        }
        ...
    }
    //Edit: Eigentlich hat das Andibert ja schon gesagt...
    Geändert von Jellysheep (06.12.09 um 14:44 Uhr)
    Andibert bedankt sich. 
    Grüße, Jellysheep

    Jeder Helfer freut sich über eine Bewertung oder ein Danke.

    Freiheit für die Gummibärchen, nieder mit den Tüten!
    Link :D

  5. #5
    hansdampf1234 Tutorials.de Gastzugang
     

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 31.10.08, 23:05
  2. Antworten: 1
    Letzter Beitrag: 08.03.08, 03:45
  3. Selbsterstellte Prozedur aufrufen
    Von shader09 im Forum C/C++
    Antworten: 1
    Letzter Beitrag: 26.10.07, 15:04
  4. Click Prozedur innerhalb einer anderen Prozedur aufrufen?!
    Von Blaubmania im Forum Visual Basic 6.0
    Antworten: 1
    Letzter Beitrag: 21.09.06, 12:55
  5. Antworten: 5
    Letzter Beitrag: 15.04.06, 15:12