1

在 JDialog 中,当用户单击 JButton 时,我想在 EDT 中执行 2 个 GUI 操作:

  1. 显示另一个带有忙碌图标的小 JDialog,告诉用户“请稍候,错误的进程结束”。
  2. 在 JTable 中插入大量记录。

当我尝试执行这两个操作时,“请稍候”对话框会按预期阻止插入过程。

正如您所看到的,这两个操作都必须在 EDT 中完成......那么有解决方案吗?

4

3 回答 3

3

不,这两个动作都不应该在 EDT 中执行。

您的记录不应插入 JTable 中,而应插入其 TableModel 中,从而触发更新事件。这样,您可以在显示对话框时轻松更新表格。

更新表格模型后,触发一个事件以确保重新绘制表格,并且它将起作用。

于 2010-06-21T14:44:06.123 回答
1

第二件事不需要在 EDT 中完成。产生一个线程以将项目添加到 JTable 的模型中,但让该线程偶尔使用 SwingWorker.invokeLater() 来触发“fireTableDataChanged”事件。

于 2010-06-21T14:45:09.717 回答
1

大多数 TableModel,例如 DefaultTableModel,在模型更新后立即调用 fireXXX 方法,所以是的,您希望在 EDT 上完成模型的更新,以便正确地重新绘制表格。

“请稍候,错误的进程结束”。

使用不确定的 JProgressBar

然后您可以根据需要更新模型而无需锁定。

于 2010-06-21T14:51:41.893 回答