package demo;

 /**
* Jave 鼠标点击画太极 PaintTaiji (整理)
* 声明:
* 又是一份没有注释的代码,而且时间已经久远了,不过代码很短,解读起来应该
* 不会很麻烦。
*
* 2016-1-2 深圳 南山平山村 曾剑锋
*/ import java.awt.Color;
import java.awt.Graphics;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.ArrayList; import javax.swing.JFrame;
import javax.swing.JPanel; public class PaintTaiji extends JPanel{
private static final long serialVersionUID = 1L;
//所有的数据都是依照
static int centerX = 600/2;
static int centerY = centerX;
ArrayList<Taiji> taijis = new ArrayList<Taiji>(); public PaintTaiji() {
startRun();
this.addMouseListener(new MouseListener() { @Override
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub } @Override
public void mousePressed(MouseEvent e) {
int mouseX = e.getX();
int mouseY = e.getY();
taijis.add(new Taiji(mouseX, mouseY));
} @Override
public void mouseExited(MouseEvent e) {
// TODO Auto-generated method stub } @Override
public void mouseEntered(MouseEvent e) {
// TODO Auto-generated method stub } @Override
public void mouseClicked(MouseEvent e) {
}
});
}
@Override
public void paint(Graphics graphics) {
super.paint(graphics);
this.setBackground(Color.red);
for (Taiji taiji : taijis) {
taiji.paint(graphics);
}
} public static void main(String[] args) {
JFrame jFrame = new JFrame();
//设置JFrame标题
jFrame.setTitle("TaiJi");
//设置JFrame的大小
jFrame.setSize(centerX*2, centerY*2);
jFrame.setLocationRelativeTo(null);
jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); PaintTaiji taiji = new PaintTaiji();
jFrame.add(taiji); //将窗口设置为可见
jFrame.setVisible(true);
}
public void startRun() {
new Thread(){
public void run() {
while(true){
try{
for (Taiji taiji : taijis) {
taiji.angle += taiji.angleStep;
}
Thread.sleep(20);
} catch (InterruptedException e) {
e.printStackTrace();
}
repaint();
}
};
}.start();
}
}
class Taiji{
int centerX;
int centerY;
int extendCircleSemi = (int)(Math.random()*200)+1;
int innerCircleSemi = extendCircleSemi/2;
//旋转角度,值由线程维护,大约每20ms自加1
int angle = 0;
int angleStep = (int)(Math.random()*6)+1;
public Taiji(int x, int y) {
centerX = x;
centerY = y;
} public void paint(Graphics graphics ) {
graphics.setColor( Color.white);
graphics.fillArc( centerX-extendCircleSemi,
centerY-extendCircleSemi,
extendCircleSemi*2,
extendCircleSemi*2, 0+angle, 180);
graphics.setColor( Color.black);
graphics.fillArc( centerX-extendCircleSemi,
centerY-extendCircleSemi,
extendCircleSemi*2,
extendCircleSemi*2,
180+angle, 180);
graphics.fillArc( centerX+(int)(Math.cos(Math.PI*angle/180)*innerCircleSemi)-innerCircleSemi,
centerY-(int)(Math.sin(Math.PI*angle/180)*innerCircleSemi)-innerCircleSemi,
innerCircleSemi*2,
innerCircleSemi*2,
0,
360);
graphics.setColor( Color.white);
graphics.fillArc( centerX+(int)(Math.cos(Math.PI*angle/180)*innerCircleSemi)-innerCircleSemi/2,
centerY-(int)(Math.sin(Math.PI*angle/180)*innerCircleSemi)-innerCircleSemi/2,
innerCircleSemi,
innerCircleSemi,
0,
360);
graphics.setColor( Color.white);
graphics.fillArc( centerX-(int)(Math.cos(Math.PI*angle/180)*innerCircleSemi)-innerCircleSemi,
centerY+(int)(Math.sin(Math.PI*angle/180)*innerCircleSemi)-innerCircleSemi,
innerCircleSemi*2,
innerCircleSemi*2,
0,
360);
graphics.setColor( Color.black);
graphics.fillArc( centerX-(int)(Math.cos(Math.PI*angle/180)*innerCircleSemi)-innerCircleSemi/2,
centerY+(int)(Math.sin(Math.PI*angle/180)*innerCircleSemi)-innerCircleSemi/2,
innerCircleSemi,
innerCircleSemi,
0,
360);
}
}

效果如图:

  

  

Jave 鼠标点击画太极 PaintTaiji (整理)的更多相关文章

  1. html5的canvas鼠标点击画圆

    <!doctype html><html lang="en"> <head> <meta charset="UTF-8" ...

  2. html5中canvas的使用 获取鼠标点击页面上某点的RGB

    1.html5中的canvas在IE9中可以跑起来.在IE8则跑不起来,这时候就需要一些东西了. 我推荐这种方法,这样显得代码不乱. <!--[if lt IE9]> <script ...

  3. QTP鼠标点击和浏览器事件的动态切换

    今天在群里有人问到一个问题,我觉得应该会有很多人会碰到,今天根据自己的思路把这个解决方案整理出来,供自己和大家参考 需求描述: 当输入一个身份证号码的时候,这个号码所对应的数据会被加载到所属的省和市的 ...

  4. unity中让物体移动到鼠标点击地面任一点的位置(单击移动和双击暂停移动)并生成图标

    using UnityEngine; using System.Collections.Generic; using UnityEngine.EventSystems; using UnityEngi ...

  5. java图形化界面-------鼠标监听画圆----------使用匿名类

    package com.aa; import java.awt.Color; import java.awt.Graphics; import java.awt.event.MouseAdapter; ...

  6. 工作当中实际运用(3)——js原生实现鼠标点击弹出div层 在点击隐藏

    function onmou(){ var divs=document.getElementById('kefuDV');//获取到你要操作的div if (divs.style.display==& ...

  7. 【Unity3D基础】让物体动起来②--UGUI鼠标点击逐帧移动

    背景 上一篇通过鼠标移动的代码很简单,所以看的人也不多,但是还是要感谢“武装三藏”在博客园给出的评论和支持,希望他也能看到第二篇,其实可以很简单,而且是精灵自控制,关键是代码少是我喜欢的方式,也再次印 ...

  8. 【Unity3D基础】让物体动起来①--UGUI鼠标点击移动

    背景 首先还是先声明自己是比较笨的一个人,总是找不到高效的学习方法,目前自己学习Unity3D的方式主要是两种,一种是直接看高质量的源码,另一种是光看不行还要自己动手,自己写一些有代表性的小程序,这也 ...

  9. 鼠标点击输入框文字消失 value placeholder 以及JQ实现效果 (仿京东的输入框效果)

    鼠标点击输入框文字消失 value实现方法  placeholder实现方法     以及JQ实现placeholder效果 <input type="text" value ...

随机推荐

  1. HDU 1028 Ignatius and the Princess III (递归,dp)

    以下引用部分全都来自:http://blog.csdn.net/ice_crazy/article/details/7478802  Ice—Crazy的专栏 分析: HDU 1028 摘: 本题的意 ...

  2. UVA 11610 Reverse Prime (数论+树状数组+二分,难题)

    参考链接http://blog.csdn.net/acm_cxlove/article/details/8264290http://blog.csdn.net/w00w12l/article/deta ...

  3. ACE 1.1.9 发布,开源云端代码编辑器

    点这里 ACE 1.1.9 发布,开源云端代码编辑器 oschina 发布于: 2015年04月06日 (1评) 分享到:    收藏 +25 4月18日 武汉 源创会开始报名,送华为开发板 ACE ...

  4. Apache POI 解析 microsoft word 图片文字都不放过

    http://blog.csdn.net/njchenyi/article/details/6894500 http://haohaoxuexi.iteye.com/blog/2031335

  5. (转)STL中set的用法

    转载自here 1.关于set map容器是键-值对的集合,好比以人名为键的地址和电话号码.相反地,set容器只是单纯的键的集合.例如,某公司可能定义了一个名为bad_checks的set容器,用于记 ...

  6. WCF分布式开发步步为赢(8):使用数据集(DataSet)、数据表(DataTable)、集合(Collection)传递数据

    数据集(DataSet).数据表(DataTable).集合(Collection)概念是.NET FrameWork里提供数据类型,在应用程序编程过程中会经常使用其来作为数据的载体,属于ADO.NE ...

  7. BZOJ 1877: [SDOI2009]晨跑 费用流

    1877: [SDOI2009]晨跑 Description Elaxia最近迷恋上了空手道,他为自己设定了一套健身计划,比如俯卧撑.仰卧起坐等 等,不过到目前为止,他坚持下来的只有晨跑. 现在给出一 ...

  8. LR实现http协议性能测试脚本

    1.  GET方式的HTTP请求性能测试脚本 Action() { web_set_max_html_param_len("); web_reg_save_param("retCo ...

  9. Struts2笔记——文件上传

    文件上传概述 * 要想使用HTML 表单上传一个或多个文件, 必须把 HTML 表单的 enctype 属性设置为multipart/form-data,把它的 method 属性设置为post *  ...

  10. Linux实施一次性任务

    一.定义 at命令:定时任务,指定一个时间执行一个任务,只能执行一次. 二.选项 三.示例 1. 使用 student 用户,创建一个任务,2 分钟以后执行,在/home/student/at.txt ...