繁体   English   中英

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

[英]How to get proper reference to refreshing method in one class(JPanel), so it can be called from method in another class?

我有这样的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很新,我不知道如何解决它。 我很确定有一种简单的方法可以做到这一点。 我将不胜感激任何建议和指示。

您可以使用侦听器模式执行此类操作。 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();
    }
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM