我有一个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 值,但它没有在屏幕上显示。
我需要做些什么才能让它实时更新?我需要这个按顺序运行,而不是同时运行程序的下一部分,因此我认为不允许多线程。
答案 0 :(得分:2)
我需要做些什么才能让它实时更新?
不要使用Thread.sleep()。这将导致Event Dispatch Thread (EDT)
进入休眠状态,这意味着在整个循环执行完毕之前,GUI无法重新绘制。
对于动画,您需要使用Swing Timer
我需要按顺序运行,而不是同时运行程序的下一部分
当Timer触发所需的次数时,然后停止Timer并调用包含其余代码的方法。
此外,您不应该将“1000”硬编码为循环控件。在不同的屏幕上执行代码时,您不知道屏幕的分辨率。您可以使用Toolkit
类和getScreenSize()
方法根据实际需求获取适当的维度。