Java 动态眨眼 EyesJPanel (整理)
1 /** 2 * Java 动态眨眼 EyesJPanel (整理) 3 * 4 * 2016-1-2 深圳 南山平山村 曾剑锋 5 * 注意事项: 6 * 1、本程序为java程序,同时感谢您花费宝贵的时间来阅读本文档; 7 * 2、请注意包名为:practice,文件名为:EyesJFrame,注意检查,以防一些不必要的麻烦; 8 * 3、在完成确认2中的内容后,本程序可以直接运行,因为本软件说明都在注释中; 9 * 4、由于本例子是继《动态中国太极图——Java原创》后编写,所以在那里面已说明的东西,不再详述, 10 * 同时由于个人能力、阅历等原因,有些细节可能并没有详细阐述,或者有疏漏,请谅解。 11 * 5、您可以注释paint()方法中的一些代码,因为效果很直观,也许这样您理解得更快,建议如下: 12 * 5.1 先看paint()方法第1条语句效果,把paint()方法中的其它语句注释掉; 13 * 5.2 再看paint()方法第1、2条语句效果,把paint()方法中的其它语句注释掉; 14 * 5.3 再看paint()方法第1、2、3条语句效果,把paint()方法中的其它语句注释掉; 15 * 5.4 以上面的方法类推,直到paint()方法中没有语句被注释,相信等您看完,您就理解了。 16 * 17 * 设计目标:在一个JFrame中绘制一个眨眼效果。 18 * 设计说明: 19 * 在本人想实现眨眼效果的时候,Java提供的绘图工具有点无奈。本设计灵感主要来自于无线电信 20 * 号调制,如果你想去了解无线电调制怎么回事,那就找下度娘或者谷哥吧,您也许没必要了解无线电调 21 * 制,因为在绘图的时候体现的只不过的绘制直线填充而已,并没有其他的高深内容。 22 * 程序的使用了sin()函数的半个周期来完成。本人知道您不喜欢看很多文字描述,很多时候文字 23 * 总是无力的,所以请参照《注意事项》中的第5步去调试吧,相信摆在眼前的调试效果会告诉你是怎么 24 * 完成的。 ^_^ 25 * 26 * 2014-1-13 星期一 晴 8度 微风 南昌 27 * 28 */ 29 package demo; 30 31 import java.awt.Color; 32 import java.awt.Graphics; 33 import javax.swing.JFrame; 34 import javax.swing.JPanel; 35 36 public class EyesJPanel extends JPanel{ 37 //设置角度值,同时也就眼睛的横坐标长度 38 public static int angle = 300; 39 //因为眨眼采用的sin()函数组成,所以其自然有幅值这一个属性。 40 int amplitude = 40; 41 //创建一个用于保存幅值的变化的变量,采用amplitude的缩写ampl,便于认识 ^_^ 42 int ampl = 0; 43 //判断是否到了幅值的临界值,由线程维护 44 boolean flag = true; 45 //定义中心点坐标,个人喜好 46 static int centerX = 600/2; 47 static int centerY = 300/2; 48 //创建统一的颜色背景,如果你有兴趣调试的话,也许你就会知道为什么要这么做了。 49 Color color = Color.red; 50 //灰眼球的半径 51 int blackBallSemi = 25; 52 53 54 public EyesJPanel() { 55 //这里面的内容在本人的《动态中国太极图——Java原创》中有说明,不再做 56 //详细介绍,当然您也可以参考一些书籍 57 58 startRun(); 59 } 60 @Override 61 public void paint(Graphics graphics) { 62 super.paint(graphics); 63 this.setBackground(Color.red); 64 //以centerX,centerY为中心,在眼睛所在的地方绘制一个白色的背景底色, 65 //长度为angle,宽为amplitude*2 66 graphics.setColor(Color.white); 67 graphics.fillRect(centerX-angle/2, centerY-amplitude, angle, amplitude*2); 68 //以centerX,centerY为中心,绘制一个灰色的眼球 69 //半径为blackBallSemi*2 70 graphics.setColor(Color.darkGray); 71 graphics.fillOval( centerX-blackBallSemi, 72 centerY-blackBallSemi, 73 blackBallSemi*2, 74 blackBallSemi*2); 75 //以centerX,centerY为中心,绘制一个白色的瞳孔 76 //半径为blackBallSemi/2 77 graphics.setColor(Color.white); 78 graphics.fillOval( centerX-blackBallSemi/2/2, 79 centerY-blackBallSemi/2/2, 80 blackBallSemi/2, 81 blackBallSemi/2); 82 //使用和窗口一样的背景色将眼睛外框颜色去掉,这里使用sin()函数来完成,灵感来收音机自信号调制 83 //在这里体现的方法其实就是画直线,把不需要的地方都画成与背景色相同的颜色,这里是中国红 84 graphics.setColor(color); 85 for (int i = 0; i < angle; i++) { 86 graphics.drawLine( centerX-angle/2+i, 87 centerY-amplitude, 88 centerX-angle/2+i, 89 centerY-(int)(Math.sin(Math.PI*i/angle)*ampl)); 90 graphics.drawLine( centerX-angle/2+i, 91 centerY+amplitude, 92 centerX-angle/2+i, 93 centerY+(int)(Math.sin(Math.PI*i/angle)*ampl)); 94 } 95 } 96 /** 97 * 用线程维护眼睛的眨眼效果,线程结构如下: 98 * 1、该线程使用while(true)维护动态效果 99 * 2、ampl用于表示当前的眨眼效果的幅值 100 * 3、ampl的值限定在于0到amplitude之间,如果您对这个算法不理解, 101 * 请像苍老师那样绘图模型图,但本人觉得您一定能秒杀这种算法 ^_^ 102 */ 103 public void startRun() { 104 new Thread(){ 105 public void run() { 106 while(true){ 107 if (flag) { 108 ampl++; 109 if (ampl >= amplitude) { 110 flag = false; 111 } 112 }else { 113 ampl--; 114 if (ampl <= 0) { 115 flag = true; 116 } 117 } 118 try { 119 Thread.sleep(40); 120 } catch (InterruptedException e) { 121 e.printStackTrace(); 122 } 123 repaint(); 124 } 125 }; 126 }.start(); 127 } 128 public static void main(String[] args) { 129 JFrame jFrame = new JFrame(); 130 jFrame.setTitle("Eyes"); 131 jFrame.setSize(centerX*2, centerY*2); 132 jFrame.setLocationRelativeTo(null); 133 JPanel jPanel = new EyesJPanel(); 134 jFrame.add(jPanel); 135 136 jFrame.setVisible(true); 137 } 138 }
转载于:https://www.cnblogs.com/zengjfgit/p/5094812.html
Java 动态眨眼 EyesJPanel (整理)相关推荐
- Java 动态写轮眼 SharinganJPanel (整理)
1 /** 2 * Java 动态写轮眼 SharingganJPanel (整理) 3 * 4 * 2016-1-2 深圳 南山平山村 曾剑锋 5 * 设计声明: 6 * 1.虽然岸本是日本人,而我 ...
- Java动态代理实现(转载\整理)
在深入解析MapReduce架构设计与实现原理一书中读到动态代理这个东东. 代理是一种常用的设计模式,其目的是为其他对象提供一种代理一控制对这个对象的访问.代理类负责为委托类进行预处理(如安全检查.权 ...
- Java 动态代理机制分析及扩展--转
http://www.ibm.com/developerworks/cn/java/j-lo-proxy1/#icomments http://www.ibm.com/developerworks/c ...
- Java 动态代理机制分析及扩展,第 1 部分
引言 Java 动态代理机制的出现,使得 Java 开发人员不用手工编写代理类,只要简单地指定一组接口及委托类对象,便能动态地获得代理类.代理类会负责将所有的方法调用分派到委托对象上反射执行,在分派执 ...
- Java 动态代理机制分析及扩展
简介: 本文通过分析 Java 动态代理的机制和特点,解读动态代理类的源代码,并且模拟推演了动态代理类的可能实现,向读者阐述了一个完整的 Java 动态代理运作过程,希望能帮助读者加深对 Java 动 ...
- Java经典面试题整理及答案详解(三)
简介: 以下是某同学面试时,面试官问到的问题,关于面试题答案可以参考以下内容- 上一篇:Java经典面试题整理及答案详解(二) Java面试真题第三弹接住!相信通过前两节的学习,大家对于Java多少有 ...
- 高级 Java 面试通关知识点整理
转载自 高级 Java 面试通关知识点整理 1.常用设计模式 单例模式:懒汉式.饿汉式.双重校验锁.静态加载,内部类加载.枚举类加载.保证一个类仅有一个实例,并提供一个访问它的全局访问点. 代理模式: ...
- java面试基础题整理(二)
java面试基础题整理 文章目录 java面试基础题整理 前端技术(HTML.CSS.JS.JQuery等) 在js中怎么样验证数字? js中如何给string这个类型加方法? 谈谈js的定时器? 请 ...
- 硬核干货合集!500+篇Java干货技术文章整理|资源|书单|工具|面试指南|强烈建议打开!
今天给大家推荐一位在阿里做Java的朋友给大家,他是公众号[程序员书单]的作者黄小斜. 他的公众号[程序员书单]这两年来累积了200多篇优质原创文章,独家原创的系列文章有<五分钟学编程>系 ...
- Java初级面试题整理 (147题)。
先看再点赞,给自己一点思考的时间,如果对自己有帮助,微信搜索[程序职场]关注这个执着的职场程序员. 我有什么:职场规划指导,技能提升方法,讲不完的职场故事,个人成长经验. 1. Java语言有哪些特点 ...
最新文章
- Tempdb数据库详细介绍
- 从国考大数据看中国哪个省的人最爱当官
- Visual Studio中怎样更改Nuget程序包源
- 20天减10斤 2020-10-21
- 常用的整数间的数制转换
- redis入门——Spring整合篇
- deebot扫地机器人响四声_中国智能扫地机器人重点制造基地企业名录(2020年版)...
- 渠道效果五步优化,让采购的流量物超所值
- 使用Rotativa在ASP.NET Core MVC中创建PDF
- docker-简单操作
- 站群的建立,是一个长期的工作,一年时间吧
- 图书管理系统项目开发计划书
- 信息安全毕设论文选题推荐
- 在线模拟装机大学计算机,模拟装机实验.doc
- 【FreeSwitch开发实践】freeswitch配置wss证书问题 Encrypted Alert/Certification Unknown
- 中国己内酰胺市场前景策略分析与投资调研评估报告2022年版
- Windows11 微软拼音注册表方式添加小鹤双拼
- 面试总结+感悟+分享
- 0685-6.2.0-什么是Cloudera虚拟私有集群和SDX-续
- 题223.2022寒假天梯赛训练-7-12 清点代码库 (25 分)
热门文章
- 计组-流水线(三张图解决流水线概念计算吞吐率)
- 历经300多年难得的那一刹那: 日全食
- 网站安全防护方案--WEB应用防火墙
- PHP连接SQL SERVER 数据库 PHP连接MYSQL数据库并解决中文乱码问题。
- vant 中 van-address-edit地址编辑 地址回显获取 areaCode
- 关闭计算机界面,电脑关机卡在关机界面怎么办?详细原因分析及解决方法来啦!...
- 力扣刷题 DAY_87 贪心
- Flurry analytics SDK集成步骤及功能简介
- vscode如何打开html
- 减法公式运算法则_六年级数学各种运算法则与学习方法