Jave PaintTaiji (整理)

  1 package demo;
  2
  3 /**
  4  *                      Jave PaintTaiji (整理)
  5  * 声明:
  6  *     又是一份没有注释的代码,而且时间已经久远了,不过代码很短,解读起来应该
  7  * 不会很麻烦。
  8  *
  9  *                                           2016-1-2 深圳 南山平山村 曾剑锋
 10  */
 11
 12 import java.awt.Color;
 13 import java.awt.Graphics;
 14 import java.awt.event.MouseEvent;
 15 import java.awt.event.MouseListener;
 16 import java.util.ArrayList;
 17
 18 import javax.swing.JFrame;
 19 import javax.swing.JPanel;
 20
 21 public class PaintTaiji extends JPanel{
 22     private static final long serialVersionUID = 1L;
 23     //所有的数据都是依照
 24     static int  centerX = 600/2;
 25     static int centerY = centerX;
 26     ArrayList<Taiji> taijis = new ArrayList<Taiji>();
 27
 28
 29     public PaintTaiji() {
 30         startRun();
 31         this.addMouseListener(new MouseListener() {
 32
 33             @Override
 34             public void mouseReleased(MouseEvent e) {
 35                 // TODO Auto-generated method stub
 36
 37             }
 38
 39             @Override
 40             public void mousePressed(MouseEvent e) {
 41                 int mouseX = e.getX();
 42                 int mouseY = e.getY();
 43                 taijis.add(new Taiji(mouseX, mouseY));
 44             }
 45
 46             @Override
 47             public void mouseExited(MouseEvent e) {
 48                 // TODO Auto-generated method stub
 49
 50             }
 51
 52             @Override
 53             public void mouseEntered(MouseEvent e) {
 54                 // TODO Auto-generated method stub
 55
 56             }
 57
 58             @Override
 59             public void mouseClicked(MouseEvent e) {
 60             }
 61         });
 62     }
 63     @Override
 64     public void paint(Graphics graphics) {
 65         super.paint(graphics);
 66         this.setBackground(Color.red);
 67         for (Taiji taiji : taijis) {
 68             taiji.paint(graphics);
 69         }
 70     }
 71
 72     public static void main(String[] args) {
 73         JFrame jFrame = new JFrame();
 74         //设置JFrame标题
 75         jFrame.setTitle("TaiJi");
 76         //设置JFrame的大小
 77         jFrame.setSize(centerX*2, centerY*2);
 78         jFrame.setLocationRelativeTo(null);
 79         jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
 80
 81         PaintTaiji taiji = new PaintTaiji();
 82         jFrame.add(taiji);
 83
 84         //将窗口设置为可见
 85         jFrame.setVisible(true);
 86     }
 87     public void startRun() {
 88         new Thread(){
 89             public void run() {
 90                 while(true){
 91                    try{
 92                            for (Taiji taiji : taijis) {
 93                            taiji.angle += taiji.angleStep;
 94                            }
 95                         Thread.sleep(20);
 96                     } catch (InterruptedException e) {
 97                         e.printStackTrace();
 98                     }
 99                     repaint();
100                 }
101             };
102         }.start();
103     }
104 }
105 class Taiji{
106     int centerX;
107     int centerY;
108     int extendCircleSemi = (int)(Math.random()*200)+1;
109     int innerCircleSemi = extendCircleSemi/2;
110     //旋转角度,值由线程维护,大约每20ms自加1
111     int angle = 0;
112     int angleStep = (int)(Math.random()*6)+1;
113     public Taiji(int x, int y) {
114         centerX = x;
115         centerY = y;
116     }
117
118     public void paint(Graphics graphics ) {
119         graphics.setColor(    Color.white);
120         graphics.fillArc(    centerX-extendCircleSemi,
121                             centerY-extendCircleSemi,
122                             extendCircleSemi*2,
123                             extendCircleSemi*2, 0+angle, 180);
124         graphics.setColor(    Color.black);
125         graphics.fillArc(    centerX-extendCircleSemi,
126                             centerY-extendCircleSemi,
127                             extendCircleSemi*2,
128                             extendCircleSemi*2,
129                             180+angle, 180);
130         graphics.fillArc(    centerX+(int)(Math.cos(Math.PI*angle/180)*innerCircleSemi)-innerCircleSemi,
131                             centerY-(int)(Math.sin(Math.PI*angle/180)*innerCircleSemi)-innerCircleSemi,
132                             innerCircleSemi*2,
133                             innerCircleSemi*2,
134                             0,
135                             360);
136         graphics.setColor(    Color.white);
137         graphics.fillArc(    centerX+(int)(Math.cos(Math.PI*angle/180)*innerCircleSemi)-innerCircleSemi/2,
138                             centerY-(int)(Math.sin(Math.PI*angle/180)*innerCircleSemi)-innerCircleSemi/2,
139                             innerCircleSemi,
140                             innerCircleSemi,
141                             0,
142                             360);
143         graphics.setColor(    Color.white);
144         graphics.fillArc(    centerX-(int)(Math.cos(Math.PI*angle/180)*innerCircleSemi)-innerCircleSemi,
145                             centerY+(int)(Math.sin(Math.PI*angle/180)*innerCircleSemi)-innerCircleSemi,
146                             innerCircleSemi*2,
147                             innerCircleSemi*2,
148                             0,
149                             360);
150         graphics.setColor(    Color.black);
151         graphics.fillArc(    centerX-(int)(Math.cos(Math.PI*angle/180)*innerCircleSemi)-innerCircleSemi/2,
152                             centerY+(int)(Math.sin(Math.PI*angle/180)*innerCircleSemi)-innerCircleSemi/2,
153                             innerCircleSemi,
154                             innerCircleSemi,
155                             0,
156                             360);
157     }
158 }

效果如图:

  

  

时间: 2024-10-10 04:44:13

Jave PaintTaiji (整理)的相关文章

WPF笔记整理 - Bitmap和BitmapImage

项目中有图片处理的逻辑,因此要用到Bitmap.而WPF加载的一般都是BitmapImage.这里就需要将BitmapImage转成Bitmap 1. 图片的路径要用这样的,假设图片在project下的Images目录,文件名XXImage.png. pack://application:,,,/xxx;component/Images/XXImage.png 2. 代码: Bitmap bmp = null; var image = new BitmapImage(new Uri(this.X

linux 命令 及学习进度综合整理

linux  命令  及学习进度综合整理 pwd 查看当前所在位置 cd  跳转到什么什么目录 ls  显示所有文件和目录 ls -l  显示目录详细信息 cd ..  返回上一级 vi  lnany.txt  创建一个文件 vi  .lnany.txt    创建一个隐藏文件 vim 是 vi 的升级版 功能更多 出现 -bash: vim: command not found 的解决办法 i. 那么如何安裝 vim 呢?输入rpm -qa|grep vim 命令, 如果 vim 已经正确安裝

夏令营讲课内容整理Day 0.

今年没有发纸质讲义是最气的.还好我留了点课件. 第一次用这个估计也不怎么会用,但尝试一下新事物总是好的. 前四天gty哥哥讲的内容和去年差不多,后三天zhn大佬讲的内容有点难,努力去理解吧. 毕竟知识还是需要消化的. 这里我只整理知识点,每天上午评测的题目我会单独处理. 嗯大概就是这样了. 写完后我就会考虑发到博客园里.

linux基本命令整理(三):进程和vim

linux基本命令整理(三) -----------进程和vim 一.进程 1.查看进程 ps:将某个时间点的程序运行的状况截取下来 a:所有的进程 x:后台进程 u:有效的使用者相关的进程(常用组合aux) -IA:也能观察系统所有的数据 axjf:连同部分的程序树状态 -I:今查看和自己bash相关的程序 top:动态的观察进程的变化 -d:后面接描述,就是整个页面刷新的时间:默认是5秒 -b:以批次的方式执行top -n:与-b搭配使用,意义是需要进行几次top的输出结果 如:top -b

检测和整理索引碎片

索引碎片的检测和整理 存储数据是为了查找数据,存储结构影响数据查找的性能.对无序数据进行查找,最快的查找算法是哈希查找:对有序数据进行查找,最快的查找算法是平衡树查找.在传统的关系型数据库中,聚集索引和非聚集索引都是平衡树(B-Tree)类型的存储结构,用于顺序存储数据,便于实现数据的快速查找.除了提升数据查找的性能之外,索引还能减少硬盘IO和内存消耗.通常情况下,硬盘IO是查找性能的瓶颈,由于索引是数据表的列的子集,这意味着,索引只存储部分列的数据,占用的硬盘空间比全部列少了很多,因此,数据库

新awk整理

总感觉上一篇awk的总结几乎是照着man翻译过来的,惨不忍睹 无意间在互联网上有找到了宝贵的资料 感觉整理的很好,想着照着这个来重新写下,对照新的man更新下吧,只是总是在改变的 一.awk简介二.awk工作流程三.awk程序结构四.awk基本语法 awk命令行模式 awk程序文件 awk标准选项五.awk内置变量 标准awk变量 awk特定变量(即专有变量)六.awk操作符 算数运算符 关系运算符 逻辑运算符 三元运算符 一元运算符 字符串连接操作符(即空格符) 数组成员操作符(in) 正则表

Linux运维(十)-2016-12-9整理

也有段时间没有整理面试题目了,这几天呢,完成了2场实习生和1场校招,十分郁闷,为什么金融运维一点都不关注技术,在乎我的学校成绩,我尼玛想说,学校那么水的课程能说明什么,跟技术有一丁丁点关系吗?我学业成绩不好,就能否定我的专业岗位基础不行吗?唉,劳资想说,你如果质疑我的能力,你就问我,劳资要是被你虐倒是我算我输,学艺不精我就服,看过去有球用. 这辈子职业生涯都不想进外包和IDC这两种类型的公司,就是TM打杂的,薪资还低,关键是不厚道,比如垃圾胜蓝.这回校招那家是我之前就提到的那家,大多数人对我是认

Web网站服务及知识整理(二)

Web网站服务及知识整理(二)

整理第三方类库

网络 AFNetworking:mattt大神的网络事件处理框架. XMPPFramework:XMPP,主要用于即时通讯. CocoaAsyncSocket:异步socket请求框架. Reachability:用来检查应用当前的网络连接状况,是苹果Reachability类的直接替代品,支持ARC,支持block,使用GCD方法来通知网络接口的变化. SocketRocket:WebSocket协议是一种网络协议,它的Web设计实现了浏览器与服务器的双向通讯.通过使用WebSockets,你