2016-04-12 12 views
1

Ben JFrame böyle bulid vardır:Bir sınıfta (JPanel) yenileme yöntemi için uygun referans nasıl alınır, bu nedenle başka bir sınıftaki yöntemden çağrılabilir?

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 onun içeriği ferahlatıcı için bir yöntem var. FooDialog kapanırken, ben FooDialog RaportPanel serinletici yöntemi çağırmak istiyorum

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

: Böyle FooDialog - menüde ben eylem JDialog diyoruz dinleyici var. FooDialog'da kapatma yönteminden çağrılabilmemiz için bu yenileme yöntemine nasıl uygun referans alınır? Belki hepsini yeniden inşa etmeliyim ki daha iyi çalışacak, Java için oldukça yeni ve nasıl çözeceğimi bilmiyorum. Bunu yapmanın kolay bir yolu olduğundan eminim. Öneriler ve işaretçiler için minnettar olacağım.

cevap

0

Dinleyici deseni ile böyle bir şey yapabilirsiniz. Impl. kapanış diyaloğu dinleyicileri için bir arayüz. Sınıfın bir iletişim kutusu açılmasını sağlayın. Bu arayüz ve onu diyaloğa kaydedin. Belirtilen dinleyicileri kaydettiğiniz diyalog sınıfınızda bir kayıt dinleyicisi yöntemi sağlayın. Diyalog kapandığında tüm dinleyicileri bu konuda bilgilendirin.

Bu genel bir yaklaşımdır. Şimdilik bu, şu anda farkında olmadığım Swing API'sına zaten dahil edilmiştir. İşte küçük bir örnek

sınıf adları kullanarak

;)

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(); 
    } 
    } 
} 
İlgili konular