0

我有一个创建 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();
}

任何帮助都非常感谢,因为我现在一直在敲我的头。谢谢。

4

1 回答 1

2

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

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

看看如何在 Swing 中使用 Swing 计时器并发

您可能还会发现更改JLabel' 图标而不是JLabel每次都创建一个新图标更简单...

于 2013-10-25T02:34:50.973 回答