综合之前的内容,做了以下实例
实例1:太极
package cn_tena.Day06;
import javax.swing.*;
public class TaiJiJFrame extends JFrame {
public TaiJiJFrame(){
this.setSize(800,600);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
TaiJi taiji = new TaiJi();
this.add(taiji);
this.setResizable(false);
this.setVisible(true);
}
public static void main(String[] args) {
TaiJiJFrame taiJiJFrame = new TaiJiJFrame();
}
}
package cn_tena.Day06;
import javax.swing.*;
import java.awt.*;
public class TaiJi extends JPanel implements Runnable {
//定义大圆圆心坐标 半径
int dx=400;
int dy=300;
int dr=200;
//定义中圆和小圆的中心
//上
int x1=400;
int y1=200;
//下
int x2 =400;
int y2=400;
//中圆半径
int r=100;
//小圆半径
int sr=20;
//定义起始角度
int angle=0;
Thread t;
TaiJi(){
t=new Thread(this);
t.start();
}
@Override
public void paint(Graphics g) {
super.paint(g);
setBackground(Color.pink);
//左半圆
g.setColor(Color.white);
g.fillArc(dx-dr,dy-dr,2*dr,2*dr,90-angle,180);
//右半圆
g.setColor(Color.black);
g.fillArc(dx-dr,dy-dr,2*dr,2*dr,-90-angle,180);
//上圆
g.setColor(Color.black);
g.fillOval(x1-r,y1-r,2*r,2*r);
//下圆
g.setColor(Color.white);
g.fillOval(x2-r,y2-r,2*r,2*r);
//小圆
//上
g.fillOval(x1-sr,y1-sr,2*sr,2*sr);
//下
g.setColor(Color.black);
g.fillOval(x2-sr,y2-sr,2*sr,2*sr);
}
@Override
public void run() {
while (true){
//弧度的增加
angle++;
//中圆的坐标
x1=(int) (dx-r*Math.sin(Math.toRadians(angle)));
y1=(int) (dy+r*Math.cos(Math.toRadians(angle)));
x2=(int) (dx+r*Math.sin(Math.toRadians(angle)));
y2=(int) (dy-r*Math.cos(Math.toRadians(angle)));
try {
Thread.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
repaint();
}
}
}
![](https://img-blog.csdnimg.cn/1a94bf0a23794af383e43da1fcdf80ec.png)
实例2:钟表
package cn_tena.Day06.homework;
import javax.swing.*;
public class ClockJFrame extends JFrame {
ClockJFrame(){
this.setSize(800,600);
this.setLocationRelativeTo(null);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
ClockJPanl jPanl = new ClockJPanl();
this.add(jPanl);
this.setResizable(false);
this.setVisible(true);
}
public static void main(String[] args) {
ClockJFrame clockJFrame = new ClockJFrame();
}
}
package cn_tena.Day06.homework;
import javax.swing.*;
import java.awt.*;
import java.text.SimpleDateFormat;
import java.util.Date;
public class ClockJPanl extends JPanel implements Runnable {
//钟表圆心
int x = 400;
int y = 400;
//定义时分秒
int h;
int m;
int s;
//定义时针分针秒针坐标
int hx, hy;
int mx, my;
int sx, sy;
Thread t;
ClockJPanl() {
t = new Thread(this);
t.start();
}
@Override
public void paint(Graphics g) {
super.paint(g);
//表盘
g.setColor(Color.black);
g.setFont(new Font("微软雅黑", Font.BOLD, 30));
g.fillOval(100-10,100-10,400+20,400+20);
g.setColor(Color.blue);
g.fillOval(100, 100, 400, 400);
g.setColor(Color.white);
//画刻度线
for (int i = 0; i < 60; i++) {
int r;
if (i % 5 == 0) {
if (i % 15 == 0) {
r = 120;
} else {
r = 140;
int a=0;
}
} else {
r = 160;
}
int lx1 = (int) (300 + Math.sin(Math.toRadians(6 * i)) * r);
int ly1 = (int) (300 - Math.cos(Math.toRadians(6 * i)) * r);
int lx2 = (int) (300 + Math.sin(Math.toRadians(6 * i)) * 200);
int ly2 = (int) (300 - Math.cos(Math.toRadians(6 * i)) * 200);
g.drawLine(lx1, ly1, lx2, ly2);
}
//画市镇秒针分针
g.drawLine(300,300,hx,hy);
g.drawLine(300,300,mx,my);
g.drawLine(300,300,sx,sy);
}
@Override
public void run() {
while (true) {
//获取时间
Date date = new Date();
SimpleDateFormat ss = new SimpleDateFormat("ss");
SimpleDateFormat mm=new SimpleDateFormat("mm");
SimpleDateFormat hh = new SimpleDateFormat("hh");
//将字符串秒数转为整型的秒数
s=Integer.parseInt(ss.format(date));
m=Integer.parseInt(mm.format(date));
h=Integer.parseInt(hh.format(date));
//秒针坐标
sx=(int) (300+Math.sin(Math.toRadians(6*s))*160);
sy=(int) (300-Math.cos(Math.toRadians(6*s))*160);
mx=(int) (300+Math.sin(Math.toRadians(6*m))*140);
my=(int) (300-Math.cos(Math.toRadians(6*m))*140);
hx=(int) (300+Math.sin(Math.toRadians(30*h+0.5*m))*120);
hy=(int) (300-Math.cos(Math.toRadians(30*h+0.5*m))*120);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
repaint();
}
}
}
![](https://img-blog.csdnimg.cn/3797a7cc68a9432186225c82ee60aa47.png)