java 图片运动轨迹_Java如何让多个图片都按照一定轨迹下落
时间: 2023-09-21 10:08:28 浏览: 50
你可以使用 Java 中的线程和定时器来控制图片的下落轨迹。下面是一个简单的实现步骤:
1. 创建一个 JFrame 窗口用于显示图片,设置窗口大小和背景颜色。
2. 在窗口中添加多个 JLabel 用于显示不同的图片,设置每个 JLabel 的初始位置、大小和图片。
3. 创建一个线程用于控制每个图片的下落轨迹,通过修改每个 JLabel 的位置实现图片的移动。
4. 使用定时器定时调用线程,以控制图片的下落速度和方向。
下面是一个简单的代码示例:
```java
import javax.swing.*;
import java.awt.*;
import java.util.Random;
public class ImageDrop extends JFrame implements Runnable {
private JLabel[] labels;
private int[] positions;
private Random random;
public ImageDrop() {
// 设置窗口大小和背景颜色
setSize(500, 500);
getContentPane().setBackground(Color.WHITE);
// 创建多个 JLabel
labels = new JLabel[3];
labels[0] = new JLabel(new ImageIcon("image1.png"));
labels[1] = new JLabel(new ImageIcon("image2.png"));
labels[2] = new JLabel(new ImageIcon("image3.png"));
// 设置每个 JLabel 的初始位置和大小
for (int i = 0; i < labels.length; i++) {
labels[i].setBounds(i * 100, 0, 100, 100);
add(labels[i]);
}
// 初始化随机数生成器和位置数组
random = new Random();
positions = new int[labels.length];
for (int i = 0; i < positions.length; i++) {
positions[i] = random.nextInt(400) + 100;
}
// 启动线程
new Thread(this).start();
// 显示窗口
setVisible(true);
}
@Override
public void run() {
while (true) {
try {
// 暂停一段时间
Thread.sleep(50);
// 修改每个 JLabel 的位置
for (int i = 0; i < labels.length; i++) {
int x = labels[i].getX();
int y = labels[i].getY();
// 计算下一个位置
int nextY = y + random.nextInt(10) + 1;
if (nextY > positions[i]) {
nextY = positions[i];
}
// 设置位置
labels[i].setLocation(x, nextY);
}
// 重绘窗口
repaint();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) {
new ImageDrop();
}
}
```
在这个例子中,我们创建了三个 JLabel 用于显示不同的图片,使用一个线程控制每个图片的下落轨迹,使用一个定时器定时调用线程,以控制图片的下落速度和方向。你可以根据需要修改代码来实现你的需求。