用Java制作一个动态的彩色爱心 您所在的位置:网站首页 黑色的爱心 用Java制作一个动态的彩色爱心

用Java制作一个动态的彩色爱心

2024-01-05 00:30| 来源: 网络整理| 查看: 265

用Java制作一个动态的彩色爱心

在这个浪漫的情人节,用Java编写的动态彩色心形程序将为你的爱人带来无限的惊喜和感动。这个程序通过使用Java的图形库和动画库,让爱心在屏幕上不断变化颜色和形状,传达出浓浓的爱意。

这个程序使用了颜色渐变和动画效果,每次循环都会产生一个新的、独特的颜色组合,让人眼花缭乱。爱心的运动也非常流畅和自然,仿佛在屏幕上跳跃起舞。

通过运行这个程序,你可以在屏幕上欣赏这个美丽的爱心,也可以为它添加一些额外的功能,比如响应鼠标点击事件或播放音乐,让你的情人节礼物更加个性化和有趣。

无论你是一个Java新手还是一个有经验的开发者,这个程序都是一个很好的练手项目,可以帮助你提高自己的编程技能,并向你的爱人表达你的爱意。让这个情人节成为你和你的爱人永生难忘的回忆。

文章目录 用Java制作一个动态的彩色爱心设计窗口的宽度和高度设计刷新延迟设计彩色颜色变化的范围设计心型图案坐标设置心形图案旋转角度设置彩虹色计数器设置线性循环,超过范围重绘设置图形获取彩虹的颜色绘制心形图案图案&窗口全代码

设计窗口的宽度和高度 private static final int WIDTH = 640; // 窗口宽度 private static final int HEIGHT = 480; // 窗口高度 设计刷新延迟 private static final int DELAY = 10; // 刷新延迟 设计彩色颜色变化的范围 private static final int MAX_RAINBOW = 256; // 彩虹色变化范围 设计心型图案坐标 private int x, y; // 心形图案坐标 设置心形图案旋转角度 private float angle; // 心形图案旋转角度 设置彩虹色计数器 private float colorCount; // 彩虹色计数器 设置线性循环,超过范围重绘 public void run() { while (true) { // 线程循环 angle += 0.02; colorCount += 0.1; if (colorCount >= MAX_RAINBOW) { // 超过范围则从头开始 colorCount = 0; } repaint(); // 重绘 try { Thread.sleep(DELAY); // 延迟 } catch (InterruptedException ex) { ex.printStackTrace(); } } } 设置图形 private void drawHeart(Graphics2D g) { g.setColor(getRainbowColor(colorCount)); // 设置彩虹色 g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); // 抗锯齿 g.fillOval(x, y, 50, 50); // 左半边圆 g.fillOval(x + 40, y, 50, 50); // 右半边圆 g.fillArc(x - 20, y - 20, 90, 90, 0, 180); // 上半边弧 } 获取彩虹的颜色 private Color getRainbowColor(float count) { // 获取彩虹色 int r = (int) (Math.sin(count * Math.PI / 128) * 127 + 128); int g = (int) (Math.sin(count * Math.PI / 64) * 127 + 128); int b = (int) (Math.sin(count * Math.PI / 32) * 127 + 128); return new Color(r, g, b); } 绘制心形图案 public void paintComponent(Graphics g) { // 绘制组件 super.paintComponent(g); // 调用父类的方法 Graphics2D g2d = (Graphics2D) g; drawHeart(g2d); // 绘制心形图案 } 图案&窗口 public static void main(String[] args) { JFrame frame = new JFrame("Animated Heart"); // 创建窗口 frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // 设置关闭方式 frame.setSize(WIDTH, HEIGHT); // 设置窗口大小 frame.setLocationRelativeTo(null); // 窗口居中 frame.add(new AnimatedHeart()); // 添加 全代码 import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; import javax.swing.JFrame; import javax.swing.JPanel; public class AnimatedHeart extends JPanel implements Runnable { private static final long serialVersionUID = 1L; private static final int WIDTH = 640; private static final int HEIGHT = 480; private static final int DELAY = 10; private static final int MAX_RAINBOW = 256; private int x, y; private float angle; private float colorCount; public AnimatedHeart() { x = WIDTH / 2 - 50; y = HEIGHT / 2 - 50; angle = 0; colorCount = 0; Thread thread = new Thread(this); thread.start(); } @Override public void run() { while (true) { angle += 0.02; colorCount += 0.1; if (colorCount >= MAX_RAINBOW) { colorCount = 0; } repaint(); try { Thread.sleep(DELAY); } catch (InterruptedException ex) { ex.printStackTrace(); } } } private void drawHeart(Graphics2D g) { g.setColor(getRainbowColor(colorCount)); g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); g.fillOval(x, y, 50, 50); g.fillOval(x + 40, y, 50, 50); g.fillArc(x - 20, y - 20, 90, 90, 0, 180); } private Color getRainbowColor(float count) { int r = (int) (Math.sin(count * Math.PI / 128) * 127 + 128); int g = (int) (Math.sin(count * Math.PI / 64) * 127 + 128); int b = (int) (Math.sin(count * Math.PI / 32) * 127 + 128); return new Color(r, g, b); } @Override public void paintComponent(Graphics g) { super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; drawHeart(g2d); } public static void main(String[] args) { JFrame frame = new JFrame("Animated Heart"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(WIDTH, HEIGHT); frame.setLocationRelativeTo(null); frame.add(new AnimatedHeart()); frame.setVisible(true); } }


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有