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