代码如下:
package cn.cjl.study0410.Calendar;
import java.awt.*;
import javax.swing.JFrame;
import javax.swing.JLabel;
/**
* 主类
*
* @author lingzi
*
*/
public class Clock extends JFrame {
Image offScreenImage;
private static final long serialVersionUID = 1L;
Rectangle circleinner = new Rectangle(100, 100, 200, 200);
Rectangle center = new Rectangle(196, 196, 8, 8);
Rectangle circleouter = new Rectangle(80, 80, 240, 240);
Rectangle second = new Rectangle(200, 100, 2, 100);
// Rectangle center=new Rectangle(200,200,8,8);
private int x1 = 200;
private int y1 = 120;
private int mx = 200;
private int my = 140;
private int hx = 200;
private int hy = 150;
private int x2 = 200;
private int y2 = 200;
/**
* 重写update方法
*/
public void update(Graphics g){
System.out.println("双缓冲方法调用");
//创建一幅用于双缓冲的、可变的、可在屏幕外绘制的图像。
this.offScreenImage=this.createImage(400,400);
//得到缓冲图像的画笔
Graphics offg=this.offScreenImage.getGraphics();
offg.setColor(Color.BLACK);
offg.fillRect(0, 0, 400, 400);
//调用paint(),将缓冲图像的画笔传入
paint(offg);
//将词缓冲图像一次性绘到代表屏幕的Graphics对象,即该方法传入的g上
g.drawImage(offScreenImage,0,0,null);
}
public Clock() {
super();
setTitle("时钟");
setBounds(0, 0, 400, 400);
setLayout(new FlowLayout());
// JLabel o12=new JLabel("12");
// o12.setBounds(center.x,center.y,center.width,center.height);
// o12.setBackground(Color.GREEN);
// o12.setBounds(center.x,center.y-200,center.width,center.height);
// o12.setFont(new Font("Harrington",1,20));
// this.add(o12);
setVisible(true);
// Graphics g=getGraphics();
new PointMove();
}
/**
* 绘制背景方法
*/
public void paint(Graphics g) {
super.paint(g);
g.setColor(Color.BLACK);
g.fillRect(0, 0, 400, 400);
g.setColor(Color.DARK_GRAY);
g.fillOval(circleouter.x, circleouter.y, circleouter.width, circleouter.height);
g.setColor(Color.BLUE);
g.fillOval(circleinner.x, circleinner.y, circleinner.width, circleinner.height);
g.setColor(Color.RED);
g.fillOval(center.x, center.y, center.width, center.height);
g.setColor(Color.RED);
g.setFont(new Font("Harrington",1,20));
g.setColor(Color.BLACK);
g.drawString("12",center.x, center.y - 100 + 16);
g.drawString("6",center.x, center.y + 100 - 4);
g.drawString("3",center.x + 100 - 4, center.y);
g.drawString("9",center.x - 100 + 4, center.y);
g.setColor(Color.RED);
g.drawLine(x1, y1, x2, y2);
g.setColor(Color.YELLOW);
g.drawLine(mx, my, x2, y2);
g.setColor(Color.DARK_GRAY);
g.drawLine(hx, hy, x2, y2);
g.setColor(Color.red);
//测试线
// g.drawLine((int)(200+50*(Math.sqrt(2))),(int)(200-50*(Math.sqrt(2))), x2, y2);
}
/**
* 继承Runnable接口的内部类,控制指针移动
*
* @author lingzi
*
*/
private class PointMove implements Runnable {
Thread thread = null;
/**
* PointMove类构造方法
*/
public PointMove() {
if (null == thread) {
thread = new Thread(this, "秒针移动");
}
// 启动线程
thread.start();
}
public void run() {
int count = 0;
int minutecount =1;
int hourcount=1;
// 无限循环
while (true) {
try {
repaint();
x1 = (int) (200 + (90 * (Math.sin((2*Math.PI) / 60* count))));
y1 = (int) (200 - (90 * (Math.cos((2*Math.PI) / 60* count))));
System.out.println(count);
count++;
if(count==60){
mx = (int) (200 + (80 * (Math.sin((2*Math.PI) / 60* minutecount))));
my = (int) (200 - (80 * (Math.cos((2*Math.PI) / 60* minutecount))));
count=1;
minutecount++;
System.out.print("MINUTE走动1");
}
if(minutecount==60){
hx = (int) (200 + (60 * (Math.sin((2*Math.PI) / 60* hourcount))));
hy = (int) (200 - (60 * (Math.cos((2*Math.PI) / 60* hourcount))));
minutecount=1;
System.out.print("HOUR走动1");
}
Thread.sleep(1000);
} catch (Exception e) {
break;
}
}
}
}
/**
* 主方法
*
* @param args
*/
public static void main(String[] args) {
new Clock();
}
}
分享到:
相关推荐
本教程将深入探讨四种常见的线程同步机制:事件对象、信号量、互斥量以及临界区,帮助开发者理解和掌握如何在VC++中安全地实现多线程通信。 一、事件对象 事件对象是Windows API中用于线程间通信的一种同步机制。它...
基于Java多线程与线程安全实践-基于Http协议的断点续传设计与实现.zip基于Java多线程与线程安全实践-基于Http协议的断点续传设计与实现.zip基于Java多线程与线程安全实践-基于Http协议的断点续传设计与实现.zip基于...
Java多线程与线程安全实践-基于Http协议的断点续传 Java多线程与线程安全实践-基于Http协议的断点续传 Java多线程与线程安全实践-基于Http协议的断点续传 Java多线程与线程安全实践-基于Http协议的断点续传 Java多...
JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多线程与线程安全实践-基于Http协议的断点续传 JAVA多...
Java多线程与线程安全实践-基于Http协议的断点续传Java多线程与线程安全实践-基于Http协议的断点续传Java多线程与线程安全实践-基于Http协议的断点续传Java多线程与线程安全实践-基于Http协议的断点续传Java多线程与...
Java多线程与线程安全实践-基于Http协议的断点续传.rarJava多线程与线程安全实践-基于Http协议的断点续传.rarJava多线程与线程安全实践-基于Http协议的断点续传.rarJava多线程与线程安全实践-基于Http协议的断点续传...
VisualC 实效编程 61 线程优先级示例-赛马VisualC 实效编程 61 线程优先级示例-赛马VisualC 实效编程 61 线程优先级示例-赛马VisualC 实效编程 61 线程优先级示例-赛马VisualC 实效编程 61 线程优先级示例-赛马...
Java多线程与线程安全实践-基于Http协议的断点续传(毕业设计+课程设计)Java多线程与线程安全实践-基于Http协议的断点续传(毕业设计+课程设计)Java多线程与线程安全实践-基于Http协议的断点续传(毕业设计+课程...
javaweb毕业设计-Java多线程与线程安全实践-基于Http协议的断点续传(可做课程设计).rarjavaweb毕业设计-Java多线程与线程安全实践-基于Http协议的断点续传(可做课程设计).rarjavaweb毕业设计-Java多线程与线程安全...
[计算机毕设]基于java的多线程与线程安全实践-基于Http协议的断点续传系统设计与实现(源代码).zip [计算机毕设]基于java的多线程与线程安全实践-基于Http协议的断点续传系统设计与实现(源代码).zip [计算机毕设]基于...
Java开发案例-springboot-61-整合asyncTool京东多线程编排工具-源代码+文档.rar Java开发案例-springboot-61-整合asyncTool京东多线程编排工具-源代码+文档.rar Java开发案例-springboot-61-整合asyncTool京东多线程...
适合练手、课程设计、毕业设计的Java项目源码:多线程与线程安全实践-基于Http协议的断点续传.rar 适合练手、课程设计、毕业设计的Java项目源码:多线程与线程安全实践-基于Http协议的断点续传.rar 适合练手、课程...
精灵线程(Daemon)或守护线程---马克-to-win java视频
基于JAVA的多线程实现方法-实现Runnable接口 将需要实现多线程的类声明为实现Runnable接口的类,实现run()方法,并将线程体放在该方法里。
操作系统--多线程买票---python--有窗体界面,就是操作系统课上的一个课外练习,传上去,保存下来。 exe文件在 map文件夹-->dict文件夹-->map文件夹-->map.exe 已经打包好了,没有python环境的电脑上也...
线程安全2--下面我们再给出一个线程不安全的例子1---马克-to-win java视频
线程技术基础---马克-to-win java视频
线程安全3--下面我们再给出一个线程不安全的例子2---马克-to-win java视频