1

我必须强制我的程序在它添加一个新组件的那一刻验证并重新绘制我的 gui(或它的一部分)。在组件被绘制在屏幕上之前,必须绝对什么都不做,然后代码才能继续。

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

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

第一级 JPanel 仅在主 for 循环(通过第一级 JPanel 的循环)完成后才能绘制。

我如何强制我的程序在创建并添加到其父级后立即绘制它?我检查了这里的一切都是在 EDT 内完成的。重绘和验证根本不起作用。

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

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

4

2 回答 2

3

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

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

第一级 JPanel 仅在主 for 循环(通过第一级 JPanel 的循环)完成后才能绘制。

我如何强制我的程序在创建并添加到其父级后立即绘制它?我检查了这里的一切都是在 EDT 内完成的。重绘和验证根本不起作用。

它不起作用,因为您阻止了 EDT。调用repaint和/或validate实际上不会触发重绘。相反,它会安排一个。您可以尝试将您的主循环分解为几个单独Runnable的循环,每个循环都安排在 EDT 上。这可能会允许Runnablerepaint呼叫安排​​的时间介于两者之间。但是,对此没有任何保证。

于 2013-03-14T23:43:35.050 回答
1

您应该有一个 GUI 数据模型,其中包含要放在面板上的信息。

您将生成信息,然后创建您的 GUI 组件。

于 2013-03-15T12:41:49.883 回答