java 计时 timeclock_用 java 写一个clock的类,100毫秒的时钟 求代码。。越简单越好。。最好有注释...

展开全部

这里有一个时钟的类,你看一下吧,不明白你的 100毫秒的时钟 是什么意思。

import java.awt.BasicStroke;

import java.awt.BorderLayout;

import java.awt.Canvas;

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.geom.Line2D;

import java.util.Date;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.Timer;

public class ClockAs extends Canvas implements ActionListener {

static JButton jb = new JButton("开始");

static JButton jb1 = new JButton("暂停62616964757a686964616fe78988e69d8331333330343961");

Date date;

Timer secondTime;

int hour, munite, second;

Line2D secondLine, muniteLine, hourLine;

int a, b, c;

double pointSX[] = new double[60],// 用来表示秒针端点坐标的数组

pointSY[] = new double[60], pointMX[] = new double[60], // 用来表示分针端点坐标的数组

pointMY[] = new double[60], pointHX[] = new double[60], // 用来表示时针端点坐标的数组

pointHY[] = new double[60];

ClockAs() {

secondTime = new Timer(1000, this);

pointSX[0] = 0; // 12点秒针位置

pointSY[0] = -100;

pointMX[0] = 0; // 12点分针位置

pointMY[0] = -90;

pointHX[0] = 0; // 12点时针位置

pointHY[0] = -70;

double angle = 6 * Math.PI / 180; // 刻度为6度

for (int i = 0; i < 59; i++) // 计算出各个数组中的坐标

{

pointSX[i + 1] = pointSX[i] * Math.cos(angle) - Math.sin(angle)

* pointSY[i];

pointSY[i + 1] = pointSY[i] * Math.cos(angle) + pointSX[i]

* Math.sin(angle);

pointMX[i + 1] = pointMX[i] * Math.cos(angle) - Math.sin(angle)

* pointMY[i];

pointMY[i + 1] = pointMY[i] * Math.cos(angle) + pointMX[i]

* Math.sin(angle);

pointHX[i + 1] = pointHX[i] * Math.cos(angle) - Math.sin(angle)

* pointHY[i];

pointHY[i + 1] = pointHY[i] * Math.cos(angle) + pointHX[i]

* Math.sin(angle);

}

for (int i = 0; i < 60; i++) {

pointSX[i] = pointSX[i] + 120; // 坐标平移

pointSY[i] = pointSY[i] + 120;

pointMX[i] = pointMX[i] + 120; // 坐标平移

pointMY[i] = pointMY[i] + 120;

pointHX[i] = pointHX[i] + 120; // 坐标平移

pointHY[i] = pointHY[i] + 120;

}

secondLine = new Line2D.Double(0, 0, 0, 0);

muniteLine = new Line2D.Double(0, 0, 0, 0);

hourLine = new Line2D.Double(0, 0, 0, 0);

secondTime.start(); // 秒针开始计时

}

public void paint(Graphics g) {

for (int i = 0; i < 60; i++) // 绘制表盘上的小刻度和大刻度

{

int m = (int) pointSX[i];

int n = (int) pointSY[i];

if (i % 5 == 0) {

g.setColor(Color.red);

g.fillOval(m - 4, n - 4, 8, 8);

} else {

g.setColor(Color.cyan);

g.fillOval(m - 2, n - 2, 4, 4);

}

}

g.fillOval(115, 115, 10, 10); // 钟表中心的实心圆

Graphics2D g_2d = (Graphics2D) g;

g_2d.setColor(Color.red);

g_2d.draw(secondLine);

BasicStroke bs = new BasicStroke(3f, BasicStroke.CAP_ROUND,

BasicStroke.JOIN_MITER);

g_2d.setStroke(bs);

g_2d.setColor(Color.blue);

g_2d.draw(muniteLine);

bs = new BasicStroke(6f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);

g_2d.setStroke(bs);

g_2d.setColor(Color.green);

g_2d.draw(hourLine);

}

public void actionPerformed(ActionEvent e) {

if (e.getSource() == secondTime) {

date = new Date();

String s = date.toString();

hour = Integer.parseInt(s.substring(11, 13));

munite = Integer.parseInt(s.substring(14, 16));

second = Integer.parseInt(s.substring(17, 19)); // 获取时间中的秒

int h = hour % 12;

a = second; // 秒针端点的坐标

b = munite; // 分针端点的坐标

c = h * 5 + munite / 12; // 时针端点的坐标

secondLine.setLine(120, 120, (int) pointSX[a], (int) pointSY[a]);

muniteLine.setLine(120, 120, (int) pointMX[b], (int) pointMY[b]);

hourLine.setLine(120, 120, (int) pointHX[c], (int) pointHY[c]);

repaint();

}

if (e.getSource() == jb) {

secondTime.start();

}

if (e.getSource() == jb1) {

secondTime.stop();

}

}

public static void main(String args[]) {

JFrame win = new JFrame("时钟");

JPanel jp = new JPanel();

jp.add(jb);

jp.add(jb1);

ClockAs clock = new ClockAs();

jb.addActionListener(clock);

jb1.addActionListener(clock);

win.add(clock, BorderLayout.CENTER);

win.add(jp, "South");

win.setVisible(true);

win.setSize(246, 300);

win.setDefaultCloseOperation(3);

win.validate();

}

}

更多追问追答

追问

我只想做一个计时装置 每隔100毫秒 执行i=i+1

追答

你看一下这个呢?

import java.io.IOException;

import java.util.Date;

import java.util.Timer;

import java.util.TimerTask;

public class Test extends TimerTask {

int i = 0;

public static void main(String args[]) throws IOException {

Timer timer = new Timer();

timer.schedule(new Test(), new Date(), 100);

}

public void run() {

System.out.println(i++);

}

}

追问

恩恩 谢谢你了

本回答由提问者推荐

2Q==

已赞过

已踩过<

你对这个回答的评价是?

评论

收起

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值