我必须强迫我的程序在向其添加新组件时对我的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
在其间滑动。但是,这并不能保证。