且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Java 动态太极图 DynamicTaiChi (整理)

更新时间:2022-08-12 21:03:55

 1 package demo;
 2 
 3 import java.awt.Color;
 4 import java.awt.Graphics;
 5 
 6 import javax.swing.JFrame;
 7 import javax.swing.JPanel;
 8 
 9 /**
10  *                   Java 动态太极图 DynamicTaiChi (整理)
11  *
12  *                                          2016-1-2 深圳 南山平山村 曾剑锋
13  */
14 
15 public class DynamicTaiChi extends JPanel{
16     private static final long serialVersionUID = 1L;
17     /*
18      *           所有的数据都是按比例依照centerX进行改变的,所以
19      * 如果想要更改面板大小的话,可以直接改centerX的值.
20      */
21     static int centerX = 600/2;
22     static int centerY = centerX;
23     static int cicle = centerX;
24     static int angle = 0;
25     
26     public DynamicTaiChi() {
27         start();
28     }
29     private void start() {
30         new Thread(new Runnable() {
31             
32             @Override
33             public void run() {
34                 while (true) {
35                     try {
36                         angle++;
37                         Thread.sleep(10);
38                         repaint();
39                     } catch (Exception e) {
40                         e.printStackTrace();
41                     }
42                 }
43                 
44             }
45         }).start();
46     }
47     @Override
48     public void paint(Graphics graphics) {
49         super.paint(graphics);
50         this.setBackground(Color.red);
51         graphics.setColor(Color.white);
52         graphics.fillArc(centerX-cicle/2, centerY-cicle/2, cicle, cicle, angle, 180);
53         graphics.setColor(Color.black);
54         graphics.fillArc(centerX-cicle/2, centerY-cicle/2, cicle, cicle, 180+angle, 180);
55         graphics.fillArc(centerX+(int)(cicle/2/2*(Math.cos(angle*Math.PI/180)))-cicle/2/2, centerY-(int)(cicle/2/2*(Math.sin(angle*Math.PI/180)))-cicle/2/2, cicle/2, cicle/2, 0, 360);
56         graphics.setColor(Color.white);
57         graphics.fillArc(centerX+(int)(cicle/2/2*(Math.cos((angle+180)*Math.PI/180)))-cicle/2/2, centerY-(int)(cicle/2/2*(Math.sin((angle+180)*Math.PI/180)))-cicle/2/2, cicle/2, cicle/2, 0, 360);
58         graphics.setColor(Color.black);
59         graphics.fillArc(centerX+(int)(cicle/2/2*(Math.cos((angle+180)*Math.PI/180)))-cicle/2/2/2, centerY-(int)(cicle/2/2*(Math.sin((angle+180)*Math.PI/180)))-cicle/2/2/2, cicle/2/2, cicle/2/2, 0, 360);
60         graphics.setColor(Color.white);
61         graphics.fillArc(centerX+(int)(cicle/2/2*(Math.cos(angle*Math.PI/180)))-cicle/2/2/2, centerY-(int)(cicle/2/2*(Math.sin(angle*Math.PI/180)))-cicle/2/2/2, cicle/2/2, cicle/2/2, 0, 360);
62     }
63     
64     public static void main(String[] args) {
65         JFrame jFrame = new JFrame();
66         jFrame.setTitle("DynamicTaiChi");
67         jFrame.setSize(centerX*2, centerY*2);
68         jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
69         jFrame.setLocationRelativeTo(null);
70         
71         DynamicTaiChi jPanel = new DynamicTaiChi();
72         jFrame.add(jPanel);
73         
74         jFrame.setVisible(true);
75     }
76 }

Java 动态太极图 DynamicTaiChi (整理)