写一个Java语言的可以加名字的爱心形状的多个图像在动态落下的代码,用idea运行
时间: 2024-10-15 12:27:36 浏览: 34
在Java中创建一个动态落下的爱心形状图片并显示,我们可以使用Swing库来构建图形界面,以及BufferedImage和Thread进行动画效果。下面是一个简单的示例,假设我们有一个名为"heart.png"的爱心图片:
```java
import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
public class FallingHearts extends JFrame {
private static final int LOVE_HEART_WIDTH = 50; // 爱心图片宽度
private static final int LOVE_HEART_HEIGHT = 50; // 爱心图片高度
private BufferedImage heartImage;
private Timer timer;
public FallingHearts() {
try {
heartImage = ImageIO.read(new File("heart.png"));
} catch (IOException e) {
System.out.println("Error loading image file");
return;
}
setSize(LOVE_HEART_WIDTH * 10, LOVE_HEART_HEIGHT * 10); // 窗口大小
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new GridLayout(0, 10)); // 水平排列10个爱心
// 创建初始位置数组,每个元素代表一个爱心的位置
Point[] heartsPositions = new Point[10];
for (int i = 0; i < heartsPositions.length; i++) {
heartsPositions[i] = new Point(i * LOVE_HEART_WIDTH, -LOVE_HEART_HEIGHT);
}
timer = new Timer(100, e -> dropHeart());
timer.start();
setVisible(true);
}
private void dropHeart() {
for (Point position : heartsPositions) {
if (position.y > getHeight()) { // 如果爱心超出屏幕底部
position.setLocation(position.x, 0); // 将其移动到顶部
} else {
repaint(position.x, position.y, LOVE_HEART_WIDTH, LOVE_HEART_HEIGHT); // 更新爱心位置
}
}
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2d = (Graphics2D) g;
g2d.drawImage(heartImage, null, heartsPositions, this); // 绘制爱心到相应位置
}
public static void main(String[] args) {
EventQueue.invokeLater(FallingHearts::new);
}
}
阅读全文