2016-04-12 4 views
1

Ich habe JFrame wie diese bulid:Wie erhalten Sie einen korrekten Verweis auf die Methode zum Auffrischen in einer Klasse (JPanel), so dass sie von der Methode in einer anderen Klasse aufgerufen werden kann?

public class AplicationGui extends JFrame{ 

    public AplicationGui() { 
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    contentPane = new JPanel(); 
    contentPane.setLayout(new BorderLayout(0, 0)); 
    setContentPane(contentPane); 

    panel = new RaportPanel(); 
    contentPane.add(panel, BorderLayout.CENTER); 


    Menu menu =new Menu(); 
    setJMenuBar(menu); 
    } 


} 

RaportPanel hat ein Verfahren zum Auffrischen es Inhalt ist. Im Menü Ich habe Aktion Hörer, die JDialog nennen - FooDialog wie folgt aus:

fooDialog=new FooDialog(); 
fooDialog.setDefaultCloseOperation(FooDialog.DISPOSE_ON_CLOSE); 
fooDialog.setModalityType(FooDialog.ModalityType.APPLICATION_MODAL); 
fooDialog.setVisible(true); 

I FooDialog wollen eine erfrischende Methode von RaportPanel rufen, wenn FooDialog schließt. Wie bekomme ich einen korrekten Verweis auf diese Auffrischungsmethode, damit sie von der Methode closing in FooDialog aufgerufen werden kann? Vielleicht sollte ich alles neu aufbauen, damit es besser funktioniert? Ich bin ziemlich neu in Java und ich weiß nicht, wie ich es lösen soll. Ich bin mir ziemlich sicher, dass es einen einfachen Weg dafür gibt. Ich werde für Anregungen und Hinweise dankbar sein.

Antwort

0

Sie können so etwas mit einem Listener-Muster tun. Impl. eine Schnittstelle für Listener des schließenden Dialogs. Lassen Sie die Klasse einen Dialog öffnen. diese Schnittstelle und registriere ihn im Dialog. Geben Sie eine Register-Listener-Methode in Ihrer Dialogklasse an, in der Sie Listener speichern. Wenn sich der Dialog schließt, informieren Sie alle Ihre Zuhörer darüber.

Dies ist ein allgemeiner Ansatz. Tipicly ist dies bereits in Swing API enthalten, was mir momentan nicht bekannt ist.

Hier ein kleines Beispiel Ihre Klassennamen verwenden;)

public interface DialogCloseListener { 
    public void dialogClosed(); 
} 

public class RaportPanel implements DialogCloseListener { 
    ... 

    fooDialog=new FooDialog(); 
    fooDialog.setDefaultCloseOperation(FooDialog.DISPOSE_ON_CLOSE); 
    fooDialog.setModalityType(FooDialog.ModalityType.APPLICATION_MODAL); 
    fooDialog.setVisible(true); 
    fooDialog.addDialogCloseListener(this); // <-- Register the listener 

    ... 

    public void dialogClosed() { 
    // Do something when dialog closed! 
    } 
} 

public class FooDialog { 
    List<DialogCloseListener> listeners = new ArrayList(); 

    public void addDialogCloseListener(DialogCloseListener listener) { 
    if (!listeners.contains(listener)) { 
     listeners.add(listener); 
    } 
    } 

    public void onClose() { // Pseudo code, look up Dialog class reference for correct callback 
    for (DialogCloseListener listener : listeners) { 
     listener.dialogClosed(); 
    } 
    } 
} 
Verwandte Themen