我在applet中绘制图像有问题。我想在applet中逐个显示所有图像,但它只显示我的代码在下面给出的文件夹的最后一个图像。
public class ImageInSwingTest extends JApplet
{
String filePath="C:\\Users\\yogi\\Pictures\\pictures"; //all .png files more than 200 files
String files;
File folder=new File(filePath);
File[] listOfFiles;
Image m;
@Override
public void init()
{
listOfFiles=folder.listFiles();
for(int i=0;i<listOfFiles.length;i++)
{
if(listOfFiles[i].isFile())
{
files=listOfFiles[i].getName();
if(files.endsWith(".png"))
{
String filepath=listOfFiles[i].getAbsolutePath();
System.out.println(filepath);
try {
m = ImageIO.read(new File(filepath));
paint(ImageInSwingTest.this.getGraphics());
} catch (IOException ex) {
Logger.getLogger(ImageInSwingTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
}
public void paint(Graphics g)
{
g.drawImage(m, 0, 0, this);
}
}
所以,请任何人告诉我如何逐一显示所有图像。 感谢。
答案 0 :(得分:2)
所以,请任何人告诉我如何逐一显示所有图像。感谢。
因为for(int i=0;i<listOfFiles.length;i++)
中的每个循环都替换了JApplet
的内容
将JPanel
添加到JApplet
将Images
放入Icon[]
将Icon
添加到JLabel
使用GridLayout
将JLabel
与Icons
放在JPanel
不要直接绘制到JApplet
,使用JPanel
或JComponent
使用覆盖方法paintComponent()
代替paint()
修改
实际上我希望所有图像互相替换,以便所有图像看起来像播放电影
您必须按Thread.sleep(int);
您可以在Thread.sleep(int);
或SwingWorker
内使用Runnable#Thread
,
不要在Swing GUI中使用Thread.sleep(int);
其他方法,因为要阻止事件调度线程,并且可能不会绘制任何内容或仅覆盖最后一个图像
Runnable#Thread
会更好,更简单,但是从Runnable#Thread
到Swing GUI的任何输出都必须将JLabel.setIcon(myIcon)
包裹到invokeLater
答案 1 :(得分:0)
结束循环的时间很短,您只能看到显示的最后一张图像。在绘制每张图片后尝试添加pause
。