代码如下:
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();
}
}
分享到:
相关推荐
此外,视频教程中通过一个具体的案例——时钟显示功能的实现,直观展示了消息机制在实际应用中的运用。时钟应用需要定时刷新界面,更新时间显示,这里涉及到的定时任务和界面更新操作,正是Android消息机制的典型...
- `Clock`类:实现了`Runnable`接口,创建一个实时更新的时钟,通过`paint`方法绘制时钟。 - `MainFrame`类:继承`JFrame`,负责主界面的布局和事件处理,包含`Clock`实例,以及`MainFrame`、`Init`、`use`和`...
**学习目标:** 掌握嵌入式系统中C语言的基础知识和编程技术,熟练运用Linux操作系统及其开发环境,为未来从事嵌入式领域的软件开发工作奠定扎实的基础。 ### 课程内容详述 #### 1. Linux操作系统 - **课程内容:**...
通过这学期来Visual Basic的学习,我初步掌握了Visual Basic语言的最基本的知识,于是在化希耀张兵等老师的指导下动手用Visual Basic编写俄罗斯方块游戏。 无可争议,《俄罗斯方块》是有史以来最伟大的游戏之一。它...