我有一个图像列表,我试图让每个图像都反复在屏幕上滑动。
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();
}
}
我当前的代码只能选择一个图像,但是我想要一种情况,在第一个图像退出屏幕后,第二个图像可以跟随,然后第三个图像,依此类推...
请多多帮助。
答案 0 :(得分:-1)
几个问题:
您应该覆盖paintComponent()
而不是paint(),并调用super.paintComponent(...)以确保首先绘制背景。
一种绘画方法仅用于绘画。您不应该做I / O来读取图像。图片应在您的类的构造函数中
您不应在绘画方法中启动计时器。计时器在构造函数中启动。
您的基本绘画代码错误。您应该有几个实例变量,a)“ currentImage”,b)“ imageNumber”。然后,在绘制方法中,您只需在x / y位置绘制currentImage。
在ActionListener中,当图像不在屏幕上时,您将增加“ imageNumber”并将图像从ArrayList复制到“ currentImage”。然后重置x / y位置,以便从右开始绘制图像。
当“ imageNumber”到达ArrayList的末尾时,将其重置为0。