我有一个带JPanel的主应用程序窗口(JFrame)。在JPanel上我有一些按钮。单击其中一个按钮后,我创建了JDialog窗口,用户可以在其中选择两个选项:“执行”或“取消”。单击“执行此操作”后,对话框将关闭,然后我创建一些带有进度条的进度窗口(另一个JDialog)。在进度窗口中,我执行具有长任务的swingworker。任务完成后,我会显示消息对话框(JOptionPane.showOptionDialog),其中包含有关任务结果(“成功”或“失败”)的信息。此任务的结果确定主应用程序窗口的状态(我更改按钮上的标签,例如“登录”/“注销”)。如何将此swingworker(在方法done()中)的结果“发送”到主应用程序窗口以刷新主应用程序窗口的状态(更改按钮的标签)?我是否需要某种控制器,可能是监听器或仅引用主应用程序窗口?
提前谢谢你,seishin
答案 0 :(得分:5)
将构造函数堆栈中的主窗口引用传递给您想要通知它的任何对象,然后向主窗口添加一个方法以接收这样的通知。
例如,在主窗口JFrame中:
public void taskComplete(boolean succeeded) { ... }
...
JDialog dialog = new JDialog(..., this);
然后在对话框构造函数中保存对主窗口的引用,当任务完成时,调用mainWindow.taskComplete(true/false)
。