我有这样的 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/