我想遍历图像的数组列表

I want to iterate through an arraylist of Images

我有一个图像数组列表,我试图让每个图像在屏幕上重复滑动..

public class GraphicsT extends JPanel implements ActionListener {

    Timer timer = new Timer(1, this);
    Image image;
    Image image2;
    int x1;
    int x2;
    int y1;
    int y2;
    int num;

    List<String> imageList1 = new ArrayList<String>();

    GraphicsT() {
        imageList1.add("image/java.jpeg");
        imageList1.add("image/slide.jpg");
        imageList1.add("image/giphy.gif");
        x1 = 100;
        y1 = 100;
        x2 = 200;
        y2 = 200;
        num = 0;
    }

    public void paint(Graphics g) {

        ImageIcon i2 = new ImageIcon("image/street.jpg");
        image2 = i2.getImage();
        g.drawImage(image2, 0, 0, null);

        for (int i = 1; i < imageList1.size(); i++) {

            ImageIcon im = new ImageIcon(imageList1.get(i));
            image = im.getImage();
            g.drawImage(image, x1, y1, x2, y2, 100, 120, 120, 240, null);

            System.out.println(imageList1.get(i));

        }
        timer.start();

    }

    @Override
    public void actionPerformed(ActionEvent e) {
        num++;
        if (num % 100 == 0) {
            x1 = x1 + 10;
            x2 = x2 + 10;
        }

        if (x2 >= 570) {
            // end reached
            x1 = 0;
            x2 = 100;
        }

        repaint();

    }
}


public class GraphicsApp extends JFrame {

    GraphicsT gt = new GraphicsT();

    public GraphicsApp() {
        this.setTitle("Multiple Slide");
        this.setSize(450, 400);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setVisible(true);
        this.add(gt);
    }

    public static void main(String[] args) {
        new GraphicsApp();
    }

}

我目前的代码只能选择一张图片,但我想要这样一种情况,即在第一张图片离开屏幕后,第二张图片可以跟随,然后是第三张,依此类推...

非常感谢您的帮助。

几个问题:

  1. 您应该重写 paintComponent() 而不是 paint() 并调用 super.paintComponent(...) 以确保首先绘制背景。

  2. 一种画法,仅作画法。你不应该做 I/O 来阅读图像。这些图像应该在 class

  3. 的构造函数中读取
  4. 你不应该在绘画方法中启动定时器。定时器在构造函数中启动。

  5. 你的基础绘画代码有误。你应该有几个实例变量,a) "currentImage", b) "imageNumber"。然后在绘画方法中,您只需在 x/y 位置绘制 currentImage 即可。

    在 ActionListener 中,当图像离开屏幕时,您递增 "imageNumber" 并将图像从 ArrayList 复制到 "currentImage"。然后重置 x/y 位置,以便从右侧开始绘制图像。

    当 "imageNumber" 到达 ArrayList 的末尾时,您将其重置为 0。