gpt4 book ai didi

java - 更新 JPanel/JFrame 不起作用

转载 作者:行者123 更新时间:2023-12-02 06:36:35 25 4
gpt4 key购买 nike

我有一个创建 JFrame 的类,并且需要在 JFrame 中显示一张图像。图像必须每隔几秒旋转一次。

我尝试在 JFrame 和 JPanel 上使用 repaint()、revalidate() 和 validate(),但似乎都不起作用。以下是我当前更新 JFrame/JPanel 的代码。此代码将等待 4 秒,然后显示第四个图像,但我希望它每秒更新一个新图像。

public void startSlideshow(){
int i = 0;
Long oldTime = System.currentTimeMillis();
do {
Long currentTime = System.currentTimeMillis();
if( currentTime - oldTime >= 1000 ) {
img = new JLabel(new ImageIcon("Albums/" + album + "/" + imageNames.get(i)));
panel.removeAll();
panel.setBackground(Color.BLACK);
panel.add(img);
panel.revalidate();
panel.repaint();
i++;
oldTime = System.currentTimeMillis(); // reset reference time
}
} while(i<imageNames.size());

panel.removeAll();
panel.setBackground(Color.BLACK);
panel.add(img);
panel.getRootPane().revalidate();
panel.repaint();
}

非常感谢任何帮助,因为我已经头痛了一段时间了。谢谢。

最佳答案

您正在阻塞事件调度线程,阻止它处理新的重绘请求。

而不是使用循环和 Thread.sleep ,尝试使用javax.swing.Timer

看看How to Use Swing TimersConcurrency in Swing

您可能还会发现更改 JLabel 更简单的图标,而不是创建新的 JLabel每次通过...

关于java - 更新 JPanel/JFrame 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19580162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com