【问题标题】:draw image in applet在小程序中绘制图像
【发布时间】:2012-05-29 19:52:18
【问题描述】:

我在小程序中绘制图像时遇到问题。我想在小程序中一张一张地显示所有图像,但它只显示我的代码在下面给出的文件夹的最后一张图像。

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);

    }

}

所以,谁能告诉我如何一张一张地显示所有图像。? 谢谢。

【问题讨论】:

  • String filePath="C:\\Users\\yogi\\Pictures\\pictures"; 这不适用于服务器上的图像,即使在受信任的小程序中也是如此。服务器需要根据需要提供文件列表,或者需要将文件名定义为小程序元素中的参数。

标签: java image swing paint japplet


【解决方案1】:

所以,谁能告诉我如何一张一张地显示所有图像。?谢谢。

  • 因为for(int i=0;i&lt;listOfFiles.length;i++) 内的每个循环都替换了JApplet 的内容

  • JPanel放到JApplet

  • Images放到Icon[]的数组中

  • Icon放到JLabel

  • 使用GridLayoutJLabelIcons 放置到JPanel

  • 不要直接绘制到JApplet,使用JPanelJComponent覆盖方法paintComponent()而不是paint()

编辑

实际上我希望所有图像相互替换,这样所有图像看起来就像在播放电影

  • 你必须通过Thread.sleep(int);暂停这个过程

  • 您可以在SwingWorkerRunnable#Thread 中使用Thread.sleep(int);

  • 不要在 Swing GUI 中使用 Thread.sleep(int); 其他方式,因为会阻塞 Event Dispatch Thread,并且可能不会绘制任何内容或仅绘制最后一个图像

  • Runnable#Thread 会更好、更简单,但是从Runnable#Thread 到 Swing GUI 的任何输出都必须将JLabel.setIcon(myIcon) 包装到invokeLater

【讨论】:

  • 实际上我希望所有图像都相互替换,这样所有图像看起来就像在播放电影。
  • 还可以考虑使用Swing Timer
  • @yogeshpatel :看看这个Slide Show的例子
【解决方案2】:

结束循环所需的时间非常短,您只能看到最后显示的图像。尝试在绘制每张图像后添加pause

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 2013-12-24
    • 1970-01-01
    • 2012-08-06
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多