Java Swing 实现随机正方形下落动画
Java Swing 实现随机正方形下落动画
本示例展示了如何使用 Java Swing 在 JFrame 窗体中实现每隔 5 秒随机生成一个正方形并让它匀速向下移动,直到移动到窗体外面自动消除的动画效果。
代码实现:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Random;
public class RandomSquare extends JFrame {
private static final int WINDOW_WIDTH = 500;
private static final int WINDOW_HEIGHT = 500;
private static final int SQUARE_SIZE = 50;
private static final int TIMER_DELAY = 5000;
private Timer timer;
public RandomSquare() {
setTitle('Random Square');
setSize(WINDOW_WIDTH, WINDOW_HEIGHT);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setResizable(false);
setLocationRelativeTo(null);
timer = new Timer(TIMER_DELAY, new TimerListener());
timer.start();
}
private class TimerListener implements ActionListener {
@Override
public void actionPerformed(ActionEvent e) {
Random random = new Random();
int x = random.nextInt(WINDOW_WIDTH - SQUARE_SIZE);
int y = -SQUARE_SIZE;
Square square = new Square(x, y);
add(square);
repaint();
}
}
private class Square extends JComponent {
private int x;
private int y;
public Square(int x, int y) {
this.x = x;
this.y = y;
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
g.setColor(Color.BLUE);
g.fillRect(x, y, SQUARE_SIZE, SQUARE_SIZE);
}
@Override
public Dimension getPreferredSize() {
return new Dimension(SQUARE_SIZE, SQUARE_SIZE);
}
@Override
public void update(Graphics g) {
super.update(g);
y += 5;
if (y > WINDOW_HEIGHT) {
timer.stop();
remove(this);
repaint();
} else {
repaint();
}
}
}
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> {
RandomSquare randomSquare = new RandomSquare();
randomSquare.setVisible(true);
});
}
}
代码解析:
- 创建 JFrame 窗体: 使用
JFrame创建一个名为RandomSquare的窗体,设置标题、大小、关闭操作、不可调整大小和居中显示。 - 创建计时器: 使用
Timer创建一个计时器,每隔 5 秒执行一次TimerListener中的代码。 - TimerListener 类: 实现
ActionListener接口,在actionPerformed方法中随机生成正方形的坐标,并创建Square对象添加到窗体中,最后调用repaint方法重新绘制窗体。 - Square 类: 继承
JComponent类,表示一个正方形,包含x和y坐标,以及paintComponent和update方法。 - paintComponent 方法: 绘制正方形,使用蓝色填充。
- update 方法: 更新正方形的
y坐标,实现向下移动的效果。如果正方形移动到窗体外面,就停止计时器,移除正方形并重新绘制窗体。 - main 方法: 在主线程中创建
RandomSquare对象并设置可见。
运行结果:
运行该代码,就会出现一个 JFrame 窗体,每隔 5 秒会在窗体中随机生成一个蓝色的正方形,然后正方形会匀速向下移动。当正方形移动到窗体外面时,会自动消除。
代码优化:
- 可以使用动画库,例如 JavaFX 或 SwingX,来简化动画实现。
- 可以增加正方形的颜色随机性,使动画更生动。
- 可以增加正方形的移动速度随机性,使动画更具随机性。
- 可以增加正方形的形状随机性,例如圆形、三角形等,使动画更丰富。
通过以上改进,可以创造出更加生动有趣的动画效果。
原文地址: http://www.cveoy.top/t/topic/vGY 著作权归作者所有。请勿转载和采集!