我有一个 for 循环,可以更改 JLayeredPane 布局中 JLabel 的位置。
c.setVisible(true);
jLayeredPane.moveToFront(c);
for (int i = 0; i < 1000; ++i) {
c.setBounds(i, 500, 94, 136);
System.out.println(c.getLocation());
try {
Thread.sleep(2);
} catch (Exception e) {
}
}
此方法引用 jLayeredPane,它是从另一个类访问的。它确实更新了 JLabel c 的 x 值,但它不会在屏幕上显示它。
我需要做什么才能使其实时更新?我需要它按顺序运行,而不是与程序的下一部分同时运行,因此我认为不允许使用多线程。
最佳答案
What do I have to do to make it update in real time?
不要使用Thread.sleep()。这将导致事件调度线程 (EDT)
hibernate ,这意味着 GUI 无法重新绘制自身,直到整个循环执行完毕。
对于动画,您需要使用 Swing Timer
I need this to run in order, not simultaneous to the next part of the program
当计时器触发所需的次数时,您可以停止计时器并调用包含其余代码的方法。
此外,您不应该将“1000”硬编码为循环控制。当代码在不同的屏幕上执行时,你不知道屏幕的分辨率是多少。您可以使用 Toolkit
类和 getScreenSize()
方法根据您的实际要求获取要使用的适当尺寸。
关于java - JLayeredPane 不更新 JLabel 的移动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44266951/