0

好的,我知道我刚刚问了一个类似的问题,但我试图简化它,所以我使用了一个看起来很糟糕的例子,一个我没想到的问题,因此得到了没有解决我的问题的答案问题。

我有这样的设置:

我在 EDT 中有一个方法。它在一堆 JTextAreas 中循环,并删除空的。

那么有什么问题呢?

每次移除 JTextArea 时,都会触发一个侦听器,然后在视觉上更新 GUI(将 JTextArea 下方的所有视觉对象拉起)。

那么会发生什么?好吧,当循环正在执行时,JTextAreas 并没有被视觉删除,它们被添加到 EDT que 中(我猜),然后在循环完成后立即将它们全部删除。然后发生的事情是所有的侦听器都立即启动并弄乱了整个 GUI。

由于一切都在 EDT 上运行,我希望代码如下所示:

  • 开始循环
  • 找到一个空的 JTextArea
  • 完全移除一个空的 JTextArea -> 触发监听器
    • 在监听器中执行代码
  • 继续循环
  • 查找下一个空的 JTextArea
  • 冲洗并重复直到循环结束

我怎样才能强制我的程序这样做呢?

我应该创建一个搜索空白 JTextAreas 的新线程,并在 invokeLater(new Runnable()) 中完成删除吗?进行搜索的实际代码实际上并不是 CPU 密集型的,它只通过 JTextAreas 的 arrayList 并检查 getText().equals(""),所以我真的不认为这是必要的......

4

1 回答 1

2

删除单个文本区域。确定是否还有更多要删除的内容,如果是,则将一个任务排队,使用SwingUtilities.invokeLater()该任务回调到当前代码中。重复直到所有文本区域都被删除。

于 2013-03-01T02:51:51.913 回答