我想遍历图像的数组列表

时间:2019-07-26 09:00:58

标签: java swing arraylist jpanel swingx

我有一个图像列表,我试图让每个图像都反复在屏幕上滑动。

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 个答案:

答案 0 :(得分:-1)

几个问题:

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

  2. 一种绘画方法仅用于绘画。您不应该做I / O来读取图像。图片应在您的类的构造函数中

  3. 读取
  4. 您不应在绘画方法中启动计时器。计时器在构造函数中启动。

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

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

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