2013-03-14 48 views
1

我必须强制我的程序验证并重新绘制我的GUI(或其中的一部分),只要它向它添加新组件。在组件被绘制在屏幕上之前必须有绝对没有做的事,然后代码可以继续。即时重绘并验证

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

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

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

如何强制我的程序在创建并添加到其父项后立即绘制它? 这里的一切都是在EDT内完成的,我查了一下。重绘和验证根本不起作用。编辑: 好吧,我用罗宾斯解决方案。

但是,是否有办法强制即时GUI更新,只要代码中的行被执行(选择循环finins和类似的东西)。如果可能的话,调试一些东西会容易得多。即使更新意味着暂停所有其他线程。

回答

3

当我创建第三级JPanel时,我需要从第一级获取 尚未绘制的JPanel。这导致他们返回错误的数据 并搞砸了整个设置。

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

第一级JPanels只在主循环(一个 ,它进入低谷一级JPanels)后完成绘制。

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

它不起作用,因为你阻止了EDT。调用repaint和/或validate实际上不会触发重绘。相反,它安排一个。您可以尝试在您分别在美国东部时间表上安排的几个单独的Runnable中拆分主循环。这可能会允许通过repaint呼叫计划的Runnable之间滑动。但是,这不能保证。

1

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

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