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

标签 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 有一个刷新其内容的方法。 在菜单中,我有一个 Action 监听器,它像这样调用 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 很陌生,我不知道如何解决它。我很确定有一种简单的方法可以做到这一点。我将不胜感激任何建议和指点。

最佳答案

您可以使用监听器模式执行类似的操作。 实现。关闭对话框监听器的接口(interface)。 让类打开一个对话框实现。这个接口(interface)并将他注册到对话框中。 在对话框类中提供注册监听器方法,您可以在其中保存给定的监听器。当对话框关闭时,通知所有听众。

这是一种通用方法。值得注意的是,这已经包含在 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();
    }
  }
}

关于java - 如何正确引用一个类(JPanel)中的刷新方法,以便可以从另一个类中的方法调用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36573926/

相关文章:

java - 从另一个类更改 jLabel 的内容

java - 自组织模糊神经网络 (SOFNN) 在 Java、C、Python 等中的实现

java - MongoDB Java 驱动程序的自定义实现

java - 在过时的操作系统上部署 JavaFX 应用程序

java - 如何将实时日期和时间添加到 JFrame 组件中,例如 "status bar"?

java - 如何在按下按钮时更新我的​​ TextArea?

Java 等待 JFrame 完成

java - 如果可能,将 jFrame 输出到第二台显示器

java - 位置并不总是出现

java - 基本MVC构建,ActionListener不起作用