有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

图像Java帮助。不规则间隔的幻灯片放映

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秒,>&燃气轮机;下一个,第三个等3秒>&燃气轮机&燃气轮机&燃气轮机;非常感谢你的帮助


共 (1) 个答案

  1. # 1 楼答案

    摆动计时器最多有两个延迟。您可以设置初始延迟和间隔延迟

    线程可以让您更好地控制图像之间的睡眠时间

    下面是一种开发幻灯片放映查看器的方法,它允许您为每个图像设置延迟。我使用了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;
            }
        }
    
    }