簡體   English   中英

Java幫助。 幻燈片播放不定期

[英]Java help. Slideshow with irregular intervals

import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;


public class slide extends JFrame

{

ImageIcon[] iconArray = new ImageIcon[25];
int iconIndex = 0;
JLabel label;
JPanel panel;

slide ()
{
    panel = new JPanel();
    label = new JLabel();

    add(panel);
    setTitle("Slide Show");
    panel.add(label);

for(int i = 0; i < iconArray.length; i++)

    {

    iconArray[i] = new ImageIcon("C:/SlideShow/slide0.jpg");

    }


        Timer timer = new Timer(1000, new TimerListener());
        timer.start();



}
private class TimerListener implements ActionListener
{
    public void actionPerformed(ActionEvent actionEvent)
    {
        label.setIcon(iconArray[iconIndex]);
        iconIndex++ ;
        if(iconIndex == 25)
            iconIndex = 0;

    }
}
public static void main(String[] args)
{
     slide frame = new slide();
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
    frame.setVisible(true);
    frame.setSize(800, 600);
    frame.setLocationRelativeTo(null);
}
}

任何想法如何制作幻燈片以顯示具有不同時間間隔的圖片? 例如,第一張圖片需要1秒,>>下一張圖片需要200毫秒,第三張圖片需要3秒鍾,以此類推。>>>>非常感謝您的幫助!

Swing計時器最多具有兩個延遲。 您可以設置初始延遲和間隔延遲。

線程使您可以更好地控制圖像之間的睡眠時間。

這是開發幻燈片放映查看器的一種方法,它允許您設置每個圖像的延遲。 我使用了Internet上的3張圖像來測試查看器。

package com.ggl.testing;

import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.IOException;
import java.net.URL;

import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;

public class Slideshow implements Runnable {

    private JFrame frame;

    private SSImage[] imageArray;

    private SSShower showImages;

    private SSViewer imageViewer;

    public Slideshow() {
        this.imageArray = new SSImage[3];

        Image image0 = null;
        Image image1 = null;
        Image image2 = null;

        try {
            image0 = ImageIO.read(new URL(
                    "http://www.ericofon.com/collection/collection1.jpg"));
            image1 = ImageIO
                    .read(new URL(
                            "http://magiclinks1.wikispaces.com/file/view"
                                    + "/collection11_lg.jpg/219833158/collection11_lg.jpg"));
            image2 = ImageIO
                    .read(new URL(
                            "http://www.pokelol.com/wp-content/uploads/2011/12"
                                    + "/my_pokemon_collection_by_pa_paiya-d4iiuo5.jpg"));
        } catch (IOException e) {
            e.printStackTrace();
            return;
        }

        imageArray[0] = new SSImage(image0, 4000L);
        imageArray[1] = new SSImage(image1, 2500L);
        imageArray[2] = new SSImage(image2, 1500L);
    }

    @Override
    public void run() {
        frame = new JFrame("Check Box Test");
        frame.setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE);
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent event) {
                exitProcedure();
            }
        });

        imageViewer = new SSViewer(700, 700);

        frame.add(imageViewer);

        frame.pack();
        frame.setLocationByPlatform(true);
        frame.setVisible(true);

        showImages = new SSShower(imageArray, imageViewer);
        new Thread(showImages).start();
    }

    private void exitProcedure() {
        showImages.setRunning(false);
        frame.dispose();
        System.exit(0);
    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Slideshow());
    }

    public class SSImage {

        private final long delay;

        private final Image image;

        public SSImage(Image image, long delay) {
            this.image = image;
            this.delay = delay;
        }

        public long getDelay() {
            return delay;
        }

        public Image getImage() {
            return image;
        }

    }

    public class SSViewer extends JPanel {

        private static final long serialVersionUID = -7893539139464582702L;

        private Image image;

        public SSViewer(int width, int height) {
            this.setPreferredSize(new Dimension(width, height));
        }

        public void setImage(Image image) {
            this.image = image;
        }

        @Override
        protected void paintComponent(Graphics g) {
            super.paintComponent(g);

            g.drawImage(image, (this.getWidth() - image.getWidth(this)) / 2,
                    (this.getHeight() - image.getHeight(this)) / 2, this);
        }
    }

    public class SSShower implements Runnable {

        private int counter;

        private volatile boolean running;

        private SSViewer ssviewer;

        private SSImage[] imageArray;

        public SSShower(SSImage[] imageArray, SSViewer ssviewer) {
            this.imageArray = imageArray;
            this.ssviewer = ssviewer;
            this.counter = 0;
            this.running = true;
        }

        @Override
        public void run() {
            while (running) {
                SSImage ssimage = imageArray[counter];
                ssviewer.setImage(ssimage.getImage());
                repaint();
                sleep(ssimage.getDelay());
                counter = ++counter % imageArray.length;
            }
        }

        private void repaint() {
            SwingUtilities.invokeLater(new Runnable() {
                @Override
                public void run() {
                    ssviewer.repaint();
                }
            });
        }

        private void sleep(long delay) {
            try {
                Thread.sleep(delay);
            } catch (InterruptedException e) {

            }
        }

        public synchronized void setRunning(boolean running) {
            this.running = running;
        }
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM