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);
        });
    }
}

代码解析:

  1. 创建 JFrame 窗体: 使用 JFrame 创建一个名为 RandomSquare 的窗体,设置标题、大小、关闭操作、不可调整大小和居中显示。
  2. 创建计时器: 使用 Timer 创建一个计时器,每隔 5 秒执行一次 TimerListener 中的代码。
  3. TimerListener 类: 实现 ActionListener 接口,在 actionPerformed 方法中随机生成正方形的坐标,并创建 Square 对象添加到窗体中,最后调用 repaint 方法重新绘制窗体。
  4. Square 类: 继承 JComponent 类,表示一个正方形,包含 xy 坐标,以及 paintComponentupdate 方法。
  5. paintComponent 方法: 绘制正方形,使用蓝色填充。
  6. update 方法: 更新正方形的 y 坐标,实现向下移动的效果。如果正方形移动到窗体外面,就停止计时器,移除正方形并重新绘制窗体。
  7. main 方法: 在主线程中创建 RandomSquare 对象并设置可见。

运行结果:

运行该代码,就会出现一个 JFrame 窗体,每隔 5 秒会在窗体中随机生成一个蓝色的正方形,然后正方形会匀速向下移动。当正方形移动到窗体外面时,会自动消除。

代码优化:

  • 可以使用动画库,例如 JavaFX 或 SwingX,来简化动画实现。
  • 可以增加正方形的颜色随机性,使动画更生动。
  • 可以增加正方形的移动速度随机性,使动画更具随机性。
  • 可以增加正方形的形状随机性,例如圆形、三角形等,使动画更丰富。

通过以上改进,可以创造出更加生动有趣的动画效果。

Java Swing 实现随机正方形下落动画

原文地址: http://www.cveoy.top/t/topic/vGY 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录