Java实现时钟

java

一、核心的表达式

因为需要动态显示小时的指针、分钟的指针、秒的指针的位置,所以确认三个指针的角度非常重要; 

X:三个指针相交的原点的X坐标;

Y:三个指针相交的原点的Y坐标;

HOUR_LENGTH、MINUTE_LENGTH、SECOND_LENGTH表示时针、分针、秒针的长度;

hour、minute、second表示现在是几时、几分、几秒;  

hourLine.x2 = X+HOUR_LENGTH*Math.cos(hour*(Math.PI/6)-Math.PI/2);

hourLine.y2 = Y+HOUR_LENGTH*Math.sin(hour*(Math.PI/6)-Math.PI/2);

minLine.x2 = X+MINUTE_LENGTH*Math.cos(minute*(Math.PI/30)-Math.PI/2);

minLine.y2 = Y+MINUTE_LENGTH*Math.sin(minute*(Math.PI/30)-Math.PI/2);

secondLine.x2 = X+SECOND_LENGTH*Math.cos(second*(Math.PI/30)-Math.PI/2);

secondLine.y2 = Y+SECOND_LENGTH*Math.sin(second*(Math.PI/30)-Math.PI/2);

二、怎样动态显示

简单的说就是每一秒更新一次屏幕,因此用Timer和TimerTask非常符合要求;每一秒刷新一次;

三、代码

package org.Demo00;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.geom.Ellipse2D;

import java.awt.geom.Line2D;

import java.util.Calendar;

import java.util.GregorianCalendar;

import java.util.Timer;

import java.util.TimerTask;

import javax.swing.JFrame;

import javax.swing.JPanel;

public class Test5 extends JFrame {

MyPanel clockPanel;

Ellipse2D.Double e;

int x;

int y;

Line2D.Double hourLine;

Line2D.Double minLine;

Line2D.Double secondLine;

GregorianCalendar calendar;

int hour;

int minute;

int second;

public static final int X = 60;

public static final int Y = 60;

public static final int X_BEGIN = 10;

public static final int Y_BEGIN = 10;

public static final int RADIAN = 50;

public Test5() {

setSize(300, 400);

clockPanel = new MyPanel();

add(clockPanel);

Timer t = new Timer();

Task task = new Task();

t.schedule(task, 0, 1000);

}

public static void main(String[] args) {

Test5 t = new Test5();

t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

t.setVisible(true);

}

class MyPanel extends JPanel {

public MyPanel() {

e = new Ellipse2D.Double(X_BEGIN, Y_BEGIN, 100, 100);

hourLine = new Line2D.Double(X, Y, X, Y);

minLine = new Line2D.Double(X, Y, X, Y);

secondLine = new Line2D.Double(X, Y, X, Y);

}

public void paintComponent(Graphics g) {

super.paintComponent(g);

Graphics2D g2 = (Graphics2D) g;

g2.drawString("12", 55, 25);

g2.drawString("6", 55, 105);

g2.drawString("9", 15, 65);

g2.drawString("3", 100, 65);

g2.draw(e);

g2.draw(hourLine);

g2.draw(minLine);

g2.draw(secondLine);

}

}

class Task extends TimerTask {

public void run() {

calendar = new GregorianCalendar();

hour = calendar.get(Calendar.HOUR);

minute = calendar.get(Calendar.MINUTE);

second = calendar.get(Calendar.SECOND);

hourLine.x2 = X + 40 * Math.cos(hour * (Math.PI / 6) - Math.PI / 2);

hourLine.y2 = Y + 40 * Math.sin(hour * (Math.PI / 6) - Math.PI / 2);

minLine.x2 = X + 45

* Math.cos(minute * (Math.PI / 30) - Math.PI / 2);

minLine.y2 = Y + 45

* Math.sin(minute * (Math.PI / 30) - Math.PI / 2);

secondLine.x2 = X + 50

* Math.cos(second * (Math.PI / 30) - Math.PI / 2);

secondLine.y2 = Y + 50

* Math.sin(second * (Math.PI / 30) - Math.PI / 2);

repaint();

}

}

}


 

以上是 Java实现时钟 的全部内容, 来源链接: utcz.com/z/394328.html

回到顶部