Java数字时钟实现代码

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用
  这是一个数字钟表程序,主要功能是从系统中获取当前的系统时间然后再将其显示在数字时钟上,由于整个的数字时钟都是用函数构成的,所以它可以实现一般的数 字时钟所不具有的功能,比如说它可以被鼠标指针拖动到窗口的任意位置,除此之外它还可以实现钟表大小随鼠标滚轮的滚动而变大变小的操作。
package TheClock;
import java.awt.*;
import javax.swing.*;
import java.lang.*;
import java.awt.event.*;
import java.util.*;
public class TheClock extends JApplet implements Runnable,MouseMotionListener,MouseListener,MouseWheelListener{
private Thread t;
boolean dstatus=true;
public static final double PI=Math.PI/180;
Image offScreenImage=null;
Graphics offScreenBuffer=null;
int width=1440;
int height=900;
double R=90;
int cx=250,cy=150;
int x2,y2;
public void init(){
t=new Thread(this);
t.start();
offScreenImage=this.createImage(width,height);
offScreenBuffer=offScreenImage.getGraphics();
addMouseListener(this);
addMouseMotionListener(this);
addMouseWheelListener(this);
}
public void update(Graphics g){
paint(g);
}
public void mouseClicked(MouseEvent e){}
public void mousePressed(MouseEvent e){}
public void mouseReleased(MouseEvent e){}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseDragged(MouseEvent e){
x2=e.getX();
y2=e.getY();
cx=x2;
cy=y2;
repaint();
}
public void mouseMoved(MouseEvent e){}
public void mouseWheelMoved(MouseWheelEvent e){
int count=e.getWheelRotation();
if(count>0){
R+=count;
}else if(count<0){
R+=count;
}
}
public void run(){
while(true){
try{
t.sleep(1000);
}catch(Exception e){}
repaint();
}
}
public void paint(Graphics g){
int s,m,h;
//创建时间
Date rightNow=new Date();
//获取系统时间
String today=rightNow.toLocaleString();
s=rightNow.getSeconds();
m=rightNow.getMinutes();
h=rightNow.getHours();
g.drawImage(offScreenImage,0,0,this);
g.setColor(Color.orange);
g.fillOval((int)(cx-R), (int)(cy-R),(int)(2*R),(int)(2*R));
g.setColor(Color.black);
g.drawOval((int)(cx-R), (int)(cy-R),(int)(2*R),(int)(2*R));
//画刻度(1,2,4,5,7,8,10,11)
g.drawString("12", cx-8, (int)(cy-R+18));
g.drawString("3", (int)(cx+R-18), cy+4);
g.drawString("6",cx-4,(int)(cy+R-10));
g.drawString("9", (int)(cx-R+12), cy+4);
g.drawString("我的钟表", cx-20, (int)(cy-R-20));
g.drawString(today,cx-55,(int)(cy+R+30));
g.setFont(new Font("TimesRoman",Font.PLAIN,14));
offScreenBuffer.clearRect(0,0,width,height);
drawCircle(g,cx,cy,R,s,m,h);
}
public void drawCircle(Graphics g,double x,double y,double R,double s,double m,double h){
double x1,y1;
x1=x+R*Math.cos((s*6-90)*PI);
y1=y+R*Math.sin((s*6-90)*PI);
//画秒针
g.setColor(Color.blue);
g.drawLine((int)x, (int)y, (int)x1, (int)y1);
//画分针
g.setColor(Color.green);
g.drawLine((int)x, (int)y, (int)(x+(R/4*3)*Math.cos((m*6-90)*PI)), (int)(y+(R/4*3)*Math.sin((m*6-90)*PI)));
//画时针
g.setColor(Color.red);
g.drawLine((int)x, (int)y, (int)(x+(R/2)*Math.cos((h*30+m*6/12-90)*PI)), (int)(y+(R/2)*Math.sin((h*30+m*6/12-90)*PI)));
//画刻度(3,6,9,12)
g.setColor(Color.black);
g.drawLine((int)x,(int)(y-R+10),(int)x,(int)(y-R));
g.drawLine((int)(x+R-10),(int)y,(int)(x+R),(int)y);
g.drawLine((int)x,(int)(y+R-10),(int)x,(int)(y+R));
g.drawLine((int)(x-R+10),(int)y,(int)(x-R),(int)y);
g.drawLine((int)(x+(R-5)*Math.cos(30*PI)),(int)(y+(R-5)*Math.sin(30*PI)),(int)(x+R*Math.cos(30*PI)),(int)(y+R*Math.sin(30*PI)));
g.drawLine((int)(x+(R-5)*Math.cos(60*PI)),(int)(y+(R-5)*Math.sin(60*PI)),(int)(x+R*Math.cos(60*PI)),(int)(y+R*Math.sin(60*PI)));
g.drawLine((int)(x+(R-5)*Math.cos(120*PI)),(int)(y+(R-5)*Math.sin(120*PI)),(int)(x+R*Math.cos(120*PI)),(int)(y+R*Math.sin(120*PI)));
g.drawLine((int)(x+(R-5)*Math.cos(150*PI)),(int)(y+(R-5)*Math.sin(150*PI)),(int)(x+R*Math.cos(150*PI)),(int)(y+R*Math.sin(150*PI)));
g.drawLine((int)(x+(R-5)*Math.cos(210*PI)),(int)(y+(R-5)*Math.sin(210*PI)),(int)(x+R*Math.cos(210*PI)),(int)(y+R*Math.sin(210*PI)));
g.drawLine((int)(x+(R-5)*Math.cos(240*PI)),(int)(y+(R-5)*Math.sin(240*PI)),(int)(x+R*Math.cos(240*PI)),(int)(y+R*Math.sin(240*PI)));
g.drawLine((int)(x+(R-5)*Math.cos(300*PI)),(int)(y+(R-5)*Math.sin(300*PI)),(int)(x+R*Math.cos(300*PI)),(int)(y+R*Math.sin(300*PI)));
g.drawLine((int)(x+(R-5)*Math.cos(330*PI)),(int)(y+(R-5)*Math.sin(330*PI)),(int)(x+R*Math.cos(330*PI)),(int)(y+R*Math.sin(330*PI)));
}
}

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:linux批量转换整个目录下的文件编码为UTF-8

下一篇: jquery实现返回顶部效果