2016-04-12 20 views
1

У меня есть JFrame Bulid как это:Как получить правильную ссылку на метод обновления в одном классе (JPanel), чтобы его можно было вызвать из метода в другом классе?

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 есть способ освежать его содержание. В меню У меня есть действие слушателя, который называют JDialog - FooDialog вроде этого:

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

Я хочу FooDialog вызвать освежающий метод из RaportPanel, когда FooDialog закрывается. Как получить правильную ссылку на этот метод обновления, чтобы его можно было вызвать из метода закрытия в FooDialog? Может быть, я должен перестроить все, чтобы он работал лучше? Я совершенно новый для Java, и я не знаю, как его решить. Я почти уверен, что есть простой способ сделать это. Буду благодарен за любые предложения и указатели.

ответ

0

Вы можете сделать что-то подобное с помощью шаблона прослушивания. Имп. интерфейс для прослушивателей закрывающего диалога. Позвольте классу открыть диалог impl. этот интерфейс и зарегистрировать его в диалоговом окне. Предоставьте метод прослушивателя регистра в вашем классе диалога, в котором вы сохраняете данные слушатели. Когда диалог закрывается, сообщите об этом всем своим слушателям.

Это общий подход. Tipicly это уже включено в Swing API, о котором я не знаю в данный момент.

Вот небольшой пример, используя ваши имена классов;)

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

 Смежные вопросы

  • Нет связанных вопросов^_^