java - 即时重绘和验证

标签 java swing event-dispatch-thread

我必须强制我的程序在向其添加新组件时验证并重新绘制我的图形用户界面(或其中的一部分)。在组件绘制到屏幕上之前必须绝对什么都不做,然后代码才能继续。

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

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

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

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

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

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

最佳答案

As I create 3rd level JPanels, I need to take data from 1st level JPanels which aren't drawn yet. That causes them to return wrong data and mess up the whole setup.

我首先建议将此设置更改为更安全的设置。必须依赖 UI 元素的绘制顺序听起来很容易引发讨厌的问题。

1st level JPanels only get painted after the master for loop (one which goes trough 1st level JPanels) is completed.

How can I force my program to draw it as soon as it's created and added to its parent? Everything here is done inside EDT, I checked. Repaint and validate didn't work at all.

它不起作用,因为您正在阻止 EDT。调用 repaint 和/或 validate 实际上不会触发重绘。相反,它安排了一个。您可以尝试在几个单独的 Runnable 中分解您的主循环,每个循环都安排在 EDT 上。这可能允许通过 repaint 调用安排的 Runnable 在两者之间滑动。但是,不能保证这一点。

关于java - 即时重绘和验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15421987/

相关文章:

java - 动态包含 HTML 页面会出现页面未找到错误

java - 如何检测图片中图片位置可能发生变化的子集图像

java - "The method addActionListener(ActionListener) in the type AbstractButton is not applicable for the arguments"

java - FLowLayout() 中的两个图像在移动时将消失

Java Netbeans : How to layer panels on top of each other?

java - 为 paintComponent(Graphics g) 使用 Thread.sleep() 的时间延迟未按预期工作

java - 使用流将实体结构映射到 map 的 map

java - 如何在 gradle 上强制使用 gradlew?

java - 在迭代时或在循环内更改 JTextField 的文本

java - 在事件调度线程中显示 JWindow