我可以在EDT中运行2个GUI操作吗?

时间:2010-06-21 14:39:54

标签: java swing edt

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

  1. 显示另一个带有忙碌图标的小型JDialog,告诉用户“请等待错误的流程结束”。
  2. 在JTable中插入大量记录。
  3. 当我尝试执行这两个操作时,“请稍候”对话框会阻止插入过程,如预期的那样。

    如你所见,这两项行动必须在EDT中完成......所以是否有解决方案?

3 个答案:

答案 0 :(得分:3)

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

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

  

“请等待错误的过程   结束”。

使用indeterminate JProgressBar

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