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

发布于 2024-09-06 21:57:51 字数 251 浏览 5 评论 0原文

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

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

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

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

In a JDialog, when user clicks a JButton i want to execute 2 GUI actions in the EDT :

  1. Showing another small JDialog with a busy icon in it to tell the user "Please wait while the wrong process ends".
  2. Inserting a big number of records in a JTable.

When i try to execute both actions the "please wait" dialog blocks the inserting process, as expected.

As you see both actions must be done in EDT ... so is there a solution for this ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

像你 2024-09-13 21:57:51

不,这两个操作不应在 EDT 中执行。

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

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

No, both actions should not be executed in the EDT.

Your records should not be inserted in the JTable, but rather in its TableModel, triggering update events. This way, you can easily have the table updated while your dialog is shown.

Once the table model is updated, fire an event to ensure table is repainted, and it will work.

长途伴 2024-09-13 21:57:51

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

The second thing does not need to be done in the EDT. Spawn off a thread to add the items to the JTable's model, but have that thread occasionally use SwingWorker.invokeLater() to fire off "fireTableDataChanged" events.

静谧 2024-09-13 21:57:51

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

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

使用 不确定的 JProgressBar

那么你可以根据需要更新模型而不锁定。

Most TableModels, for example the DefaultTableModel, invoke the fireXXX methods as soon as the model is updated so yes you want the updating of the model to be done on the EDT so the table gets repainted properly.

"Please wait while the wrong process
ends".

Use an indeterminate JProgressBar

then you can update the model as required without it locking.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文