在 JDialog 中,当用户单击 JButton 时,我想在 EDT 中执行 2 个 GUI 操作:
- 显示另一个带有忙碌图标的小 JDialog,告诉用户“请稍候,错误的进程结束”。
- 在 JTable 中插入大量记录。
当我尝试执行这两个操作时,“请稍候”对话框会按预期阻止插入过程。
正如您所看到的,这两个操作都必须在 EDT 中完成......那么有解决方案吗?
不,这两个动作都不应该在 EDT 中执行。
您的记录不应插入 JTable 中,而应插入其 TableModel 中,从而触发更新事件。这样,您可以在显示对话框时轻松更新表格。
更新表格模型后,触发一个事件以确保重新绘制表格,并且它将起作用。
第二件事不需要在 EDT 中完成。产生一个线程以将项目添加到 JTable 的模型中,但让该线程偶尔使用 SwingWorker.invokeLater() 来触发“fireTableDataChanged”事件。
大多数 TableModel,例如 DefaultTableModel,在模型更新后立即调用 fireXXX 方法,所以是的,您希望在 EDT 上完成模型的更新,以便正确地重新绘制表格。
“请稍候,错误的进程结束”。
然后您可以根据需要更新模型而无需锁定。