如何在一个类(JPanel)中正确引用刷新方法,因此可以从另一个类中的方法调用它?

时间:2016-04-12 12:54:03

标签: java swing jframe jpanel jmenu

我有这样的JFrame:

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关闭时,我希望FooDialog从RaportPanel调用刷新方法。如何正确引用该刷新方法,以便可以从FooDialog中的关闭方法调用它?也许我应该重建所有它以便更好地工作?我对Java很新,我不知道如何解决它。我很确定有一种简单的方法可以做到这一点。我将不胜感激任何建议和指示。

1 个答案:

答案 0 :(得分:0)

您可以使用侦听器模式执行此类操作。 IMPL。关闭对话框的侦听器的界面。 让班级打开一个对话框。这个界面并将他注册到对话框。 在对话框类中提供注册侦听器方法,您可以在其中保存给定的侦听器。当对话框关闭时,通知所有听众。

这是一种通用方法。很明显,这已经包含在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();
    }
  }
}