题
在JDialog中,当用户单击JButton时,我想在EDT中执行2个GUI操作:
- 显示另一个带有繁忙图标的小型JDialog告诉用户“请在错误的过程结束时等待”。
- 在JTable中插入大量记录。
当我尝试执行这两个操作时,“请等待”对话框会按预期阻止插入过程。
如您所见,这两个动作都必须在EDT中完成...所以 有解决方案吗?
解决方案
不,这两个操作都不应在EDT中执行。
您的记录不应插入JTable,而应插入其tablemodel中,从而触发更新事件。这样,在显示对话框时,您可以轻松地更新表。
一旦更新表模型,请点火事件,以确保对表进行重新粉刷,并且可以正常工作。
其他提示
第二件事不需要在EDT中完成。产生线程以将项目添加到JTable的型号中,但是该线程偶尔使用Swingworker.invokelater()启动“ firetabledabledatachanged”事件。
大多数tablemodels,例如DefaultTableModel,一旦更新模型,就会调用Firexxx方法,因此是的,您希望在EDT上完成模型的更新,以便将表正确重新粉刷。
“请等待错误的过程结束”。
然后,您可以根据需要更新模型而无需锁定。
不隶属于 StackOverflow