一、背景

本文主要内容包括如何使用 Java-JFrame可视化开发,实现一棵动态的圣诞树。

好文章 记得 收藏+点赞+关注 !!!

二、效果预览

通过左上角的按钮打开动态效果!

话不多说,直接上代码!

三、完整代码

/*** @author JiaMing* @since 2021/12/17/0017 下午 13:47**/public class MyPanel extends JPanel implements ActionListener {/*** 坐标*/public int x, y;/*** 开关按钮*/public JButton onOff;/*** 触发时间事件*/public Timer time;/*** 判断开关*/public boolean flag;/*** 控制动画*/public boolean color;//获取本地音乐File file = new File("E:\\christmasTree\\music.wav");URL url = null;URI uri = null;AudioClip clip;MyPanel() {setLayout(null);//获取本地关闭按钮ImageIcon icon = new ImageIcon("E:\\christmasTree\\OFF.png");icon.setImage(icon.getImage().getScaledInstance(50, 50, 0));onOff = new JButton();onOff.addActionListener(this);//添加按钮图片onOff.setIcon(icon);//设置 取消边框onOff.setBorder(null);//设置 取消默认背景颜色onOff.setContentAreaFilled(false);onOff.setBounds(0, 0, 50, 50);add(onOff);flag = true;color = true;time = new Timer(300, this);time.stop();try {uri = file.toURI();url = uri.toURL();} catch (MalformedURLException e1) {e1.printStackTrace();}clip = Applet.newAudioClip(url);}public void paintComponent(Graphics g) {x = 380;y = 100;if (color) {ImageIcon image1 = new ImageIcon("E:\\christmasTree\\2.png");g.drawImage(image1.getImage(), x - 3, y - 25, 25, 25, null);} else {ImageIcon image1 = new ImageIcon("E:\\christmasTree\\1.png");g.drawImage(image1.getImage(), x - 2, y - 24, 26, 26, null);}Color red = new Color(255, 0, 0);Color yellow = new Color(255, 241, 0);//画第一个三角形(第一层圣诞树)drawTree(1, 4, g);if (color) {//画第一个三角形的黄色装饰drawDecoration(x + 22, y - 44, 6, yellow, g);//画第一个三角形的红色装饰drawDecoration(x, y - 22, 8, red, g);} else {//画第一个三角形的红色装饰drawDecoration(x + 22, y - 44, 6, red, g);//画第一个三角形的黄色装饰drawDecoration(x, y - 22, 8, yellow, g);}x = 380 - 2 * 22;//画第二个三角形(中间层)drawTree(3, 6, g);if (color) {//画第二个三角形的黄色装饰drawDecoration(x + 22, y - 44, 10, yellow, g);//画第二个三角形的红色装饰drawDecoration(x, y - 22, 12, red, g);} else {//画第二个三角形的红色装饰drawDecoration(x + 22, y - 44, 10, red, g);//画第二个三角形的黄色装饰drawDecoration(x, y - 22, 12, yellow, g);}x = 380 - 4 * 22;//画第三个三角形(最底层)drawTree(5, 8, g);if (color) {//画第三个三角形的黄色装饰drawDecoration(x + 22, y - 44, 14, yellow, g);//画第三个三角形的红色装饰drawDecoration(x, y - 22, 16, red, g);} else {//画第三个三角形的红色装饰drawDecoration(x + 22, y - 44, 14, red, g);//画第三个三角形的黄色装饰drawDecoration(x, y - 22, 16, yellow, g);}x = 380 - 22;//画出树根drawRoot(g);}//画树void drawTree(int from, int to, Graphics g) {//设置树的颜色g.setColor(new Color(9, 124, 37));for (int i = from; i <= to; i++) {for (int j = 0; j < (i * 2 - 1); j++) {g.fillRect(x, y, 20, 20);x += 22;}x = 380 - i * 22;y += 22;}}//画装饰void drawDecoration(int tx, int ty, int num, Color c, Graphics g) {g.setColor(c);g.fillRoundRect(tx, ty, 18, 18, 18, 18);g.fillRoundRect(tx + num * 22, ty, 18, 18, 18, 18);}//画树根void drawRoot(Graphics g) {//设置树根颜色g.setColor(new Color(131, 78, 0));for (int i = 0; i < 4; i++) {for (int j = 0; j < 3; j++) {g.fillRect(x, y, 20, 20);x += 22;}x = 380 - 22;y += 22;}}public void actionPerformed(ActionEvent e) {//按钮事件if (e.getSource() == onOff) {//开关打开if (flag) {ImageIcon icon = new ImageIcon("E:\\christmasTree\\ON.png");icon.setImage(icon.getImage().getScaledInstance(50, 50, 0));onOff.setIcon(icon);flag = false;clip.loop();time.restart();} else {//开关关闭ImageIcon icon = new ImageIcon("E:\\christmasTree\\OFF.png");icon.setImage(icon.getImage().getScaledInstance(50, 50, 0));onOff.setIcon(icon);flag = true;time.stop();clip.stop();}} else if (e.getSource() == time) {repaint();color = !color;}}}
/*** @author JiaMing* @since 2021/12/17/0017 下午 13:43**/public class MyFrame extends JFrame {MyPanel p;MyFrame() {p = new MyPanel();add(p);//设置布局setBounds(400, 200, 800, 800);setVisible(true);validate();setDefaultCloseOperation(MyFrame.EXIT_ON_CLOSE);//添加文字标签 可以添加你想发给的人的名字哦JLabel label1 = new JLabel("merry christmas!");//设置字体,格式(斜体,粗细),尺寸label1.setFont(new Font("宋体", Font.BOLD, 30));//设置标签颜色label1.setForeground(Color.red);label1.setBounds(250, 300, 500, 400);p.add(label1);p.setVisible(true);}}

接下来是主函数,用这个来运行!

/*** @author JiaMing* @since 2021/12/17/0017 下午 14:13**/
public class Main {public static void main(String[] args) {new MyFrame();}
}

推荐阅读:

  • 由银行填表时返回上一步引发的对回溯算法的思考(java实现回溯算法)
  • 上班摸鱼时引发的对多线程的思考

参考博客:https://blog.csdn.net/weixin_44689154/article/details/103690144


写在最后
我的女朋友说这个圣诞树极其丑陋,建议发给女朋友之前三思!

以下是她的评价:


ok,我话说完…

圣诞节用java画一棵圣诞树给你的女友相关推荐

  1. 圣诞节用Python画一颗圣诞树

    圣诞节用Python画一颗圣诞树 前言 一.初级圣诞树 二.中级圣诞树 三.高级圣诞树 四.超高级圣诞树 总结 前言 正在学Python的你是不是很想在圣诞节给女朋友一个惊喜? 哦!忘了,或许你压根儿 ...

  2. 如何用java画一颗圣诞树

    如何用java画一颗圣诞树 哈喽 ,今天教各位一个有趣的代码,利用for循环简单地画一个圣诞树. 代码如下: ```java public class Dan {public static void ...

  3. 用代码画两棵圣诞树送给你【附详细代码】

    大家好,我是宁一 代码的魔力之处在于,可以帮我们实现许多奇奇怪怪.有趣的想法. 比如,用Python的Turtle库,可以帮我们在电脑上画出好看的图像. 下面这张樱花图就是用Turtle库实现的. 这 ...

  4. python turtle画圣诞树动图_用 turtle 画一棵圣诞树

    蹭个洋年的热点,练一下刚学的 turtle 库. 本来想加个亮闪闪的灯光的效果,想来想去,只能想到利用time.sleep()来重复绘制圆球,没别的好方法,就暂时不写了.等以后道行更高一点,再来补充这 ...

  5. 【小5聊】使用js+css+div布局方式画一棵圣诞树,带闪烁霓虹灯效果

    虽然jQuery时代已经逐渐退出历史舞台,在拥抱vue的同时,也还是可以用jQuery锻炼下编程思维,毕竟比较灵活. 1.适合基础入门的前端小伙伴 2.适合使用jQuery锻炼实现前端效果小伙伴 3. ...

  6. 用c语言程序画圣诞树,【图片】用C语言画一棵“圣诞树”(前方高能,学渣小心避让!)【广西科技大学吧】_百度贴吧...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 #include #include #include #define PI 3.14159265359 float sx, sy; float sdCir ...

  7. 小白都会的Python项目实战(附源码)3分钟画一棵圣诞树

    前言 本文给大家分享的是如何通过 Python 脚本一次运行成功圣诞树代码,圣诞节快到了,兄弟们可以get起来了,拿去哄哄女朋友了! 开发工具 Python版本:3.11.0 编译器: pycharm ...

  8. 圣诞节到了,让我们用 Python 画几棵圣诞树,玩玩~

    本人不崇尚洋节,此代码仅供玩乐, 快到圣诞节了,氿 柒先祝大家圣诞快乐 一:圣诞树弹窗(打印) import os import sys import platform import random i ...

  9. 用python画圣诞树图片-节日快乐! Python画一棵圣诞树送给你

    本文实例为大家分享了Python画圣诞树的具体代码,供大家参考,具体内容如下 源代码 from turtle import * import random import time #from unit ...

最新文章

  1. JS:2.1,流程控制(if,switch)高级
  2. echarts加载动画效果_入门ae教程:科技类的加载动画,非常酷炫的效果,附带教程...
  3. PL/SQL Developer 9 注册机
  4. mysql安装忘了root_MySQL - 安装:MySQL忘记root密码的解决办法
  5. 小波分析理论与matlabr2007实现_HHT变换基本理论
  6. 暑假集训 || 网络流
  7. shell学习之定时运行作业
  8. 上海大华条码称代码_上海大华计价电子秤 使用软件 TM-H 大华条码称设置15KG
  9. 深度学习视频教程推荐
  10. 微信二维码来源统计自动生成二维码统计?
  11. 韩乔生最牛的一次解说 (超级搞笑)
  12. 三星i908、iPhone3G对比评测
  13. mybatis,引入pageHelper,参数中有pageNum和pageSize,且都不为空,会分页
  14. 套料排版代码python_钣金制造管理系统Fabcost自动套料排版设置
  15. php 验证码不正确,dedecms织梦网站后台登录一直提示验证码不正确
  16. Do it for success
  17. 台资企业管理职的中英文称谓以及级别
  18. 湖北校园网PC端拨号算法逆向
  19. Microland被Everest Group评为主要竞争者和明星企业
  20. Lazada开店流程介绍及需要的资料要求

热门文章

  1. 是否有标准函数来检查 JavaScript 中的 null、未定义或空白变量?
  2. (C++实例)实现people类、student类,teacher类、graduate类、助教类继承和派生并测试
  3. 新概念英语第四册01-15课(转)
  4. HM编码器代码阅读(14)——帧间预測之AMVP模式(二)predInterSearch函数
  5. 控制台输出——键盘图形
  6. Studing Day3 - python基础3
  7. 科林明伦杯 - B Time
  8. 捷配浅谈PCB叠层的概念、设计原则
  9. 美国L1签证和B1,E2签证的区别
  10. Linux公社 学习连接