how to auto change image in java swing?

前端 未结 2 1034
灰色年华
灰色年华 2020-12-12 05:42

Hi i am creating a java desktop application where i want to show image and i want that all image should change in every 5 sec automatically i do not know how to do this

相关标签:
2条回答
  • 2020-12-12 06:11

    In this example, a List<JLabel> holds each image selected from a List<Icon>. At each step of a javax.swing.Timer, the list of images is shuffled, and each image is assigned to a label.

    image

    import java.awt.EventQueue;
    import java.awt.GridLayout;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    import javax.swing.Icon;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.Timer;
    import javax.swing.UIManager;
    
    /**
     * @see http://stackoverflow.com/a/22423511/230513
     * @see http://stackoverflow.com/a/12228640/230513
     */
    public class ImageShuffle extends JPanel {
    
        private List<Icon> list = new ArrayList<Icon>();
        private List<JLabel> labels = new ArrayList<JLabel>();
        private Timer timer = new Timer(1000, new ActionListener() {
    
            @Override
            public void actionPerformed(ActionEvent e) {
                update();
            }
        });
    
        public ImageShuffle() {
            this.setLayout(new GridLayout(1, 0));
            list.add(UIManager.getIcon("OptionPane.errorIcon"));
            list.add(UIManager.getIcon("OptionPane.informationIcon"));
            list.add(UIManager.getIcon("OptionPane.warningIcon"));
            list.add(UIManager.getIcon("OptionPane.questionIcon"));
            for (Icon icon : list) {
                JLabel label = new JLabel(icon);
                labels.add(label);
                this.add(label);
            }
            timer.start();
        }
    
        private void update() {
            Collections.shuffle(list);
            int index = 0;
            for (JLabel label : labels) {
                label.setIcon(list.get(index++));
            }
        }
    
        private void display() {
            JFrame f = new JFrame("ImageShuffle");
            f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
            f.add(this);
            f.pack();
            f.setLocationRelativeTo(null);
            f.setVisible(true);
        }
    
        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
    
                @Override
                public void run() {
                    new ImageShuffle().display();
                }
            });
        }
    }
    
    0 讨论(0)
  • 2020-12-12 06:14

    one way of achieving your goal is setting a swing.Timer to notify its action listeners every 5 seconds, set your class to be the listener for the timer and implement the actionListener interface by having an actionPerformed method which will change all images using their setImage method. the code should look like this:

    public class ImageGallery extends JFrame implements ActionListener {
    Timer timer;
    
    public ImageGallery() {
        timer = new Timer(5000, this);
    }
    
    @Override
    public void actionPerformed(ActionEvent e) {
        if (e.getSource() == timer) {
            for (int i=0; i<vectorOfImages.size(); i++) {
                vectorOfImages.get(i).setImage(AnotherImage);
            }
        }
    }
    

    }

    0 讨论(0)
提交回复
热议问题