我必须强迫我的程序在向其添加新组件时对我的GUI(或其中的一部分)进行验证和重新绘制。在将组件绘制到屏幕上之前,绝对不能做任何事情,然后代码才能继续。

我正在创建分层的JPanel结构。一系列JPanels各自继承一系列JPanels,每个JPanels包含一系列JPanels。

创建3级JPanels时,我需要从1级JPanels中获取尚未绘制的数据。这导致他们返回错误的数据并弄乱了整个设置。

仅在master for循环(一个通过第一级JPanels的循环)完成后才绘制第一级JPanels。

如何在我的程序创建并添加到其父级后立即对其进行绘制?
我检查过,这里的所有操作都在EDT内部完成。重新绘制和验证根本不起作用。

编辑:
好的,我使用了Robins解决方案。

但是,有一种方法可以在代码中的行被执行后立即强制进行GUI更新(以帮助循环到finins和类似的东西)。如果可能的话,调试某些东西会容易得多。即使insta-update意味着暂停所有其他线程。

最佳答案

创建3级JPanels时,我需要从1级中获取数据
  尚未绘制的JPanels。这导致他们返回错误的数据
  并弄乱了整个设置。


我首先建议将此设置更改为更安全的设置。不得不依赖UI元素的绘制顺序听起来像是麻烦问题的好来源。


  1级JPanels仅在主for循环(一个
  通过第一级JPanels)。
  
  我如何强制我的程序在创建后立即绘制并
  添加到其父?我检查过,这里的所有操作都在EDT内部完成。
  重新绘制和验证根本不起作用。


它不起作用,因为您正在阻止EDT。实际上,调用repaint和/或validate不会触发重新绘制。而是安排一个。您可以尝试将主循环拆分为几个单独的Runnable,分别在EDT上安排。这可能允许通过Runnable调用安排的repaint在其间滑动。但是,这并不能保证。

10-08 17:06