java里面秒表的代码 java秒表程序设计

java计时器秒表源代码

import java.awt.*;

创新互联建站坚持“要么做到,要么别承诺”的工作理念,服务领域包括:做网站、网站制作、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的新河网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

public class Clock {

private int hour;

private int minute;

private int second;

public Clock(){

}

public Clock(int hrs,int min,int sec){

hour =hrs % 12;

minute = min;

second = sec;

}

void show (Graphics g,int cx,int cy,int rad){

int hourLenght = (int)(rad * 0.5);//时针的长度

int minuteLenght = (int)(rad * 0.6);//分针的长度

int secondLenght = (int)(rad * 0.9);//秒针的长度

double angle;//角度

//画出钟面

g.drawOval(cx-rad, cy - rad, rad * 2, rad * 2);

//画出时针

angle = (double)(hour*60*60 + minute*60 + second)/43200.0*2.0*Math.PI;

drawNiddle(g,Color.blue, cx, cy, hourLenght,angle);

//画分针

angle = (double)(minute*60 + second)/3600 * 2.0 * Math.PI;

drawNiddle(g,Color.blue, cx, cy, minuteLenght,angle);

// 画秒针

angle = (double)(second)/60*2.0*Math.PI;

drawNiddle(g,Color.blue, cx, cy, secondLenght,angle);

}

private void drawNiddle(Graphics g ,Color c,int x,int y,int len,double angle){

int ex = (int)(x + len * Math.sin(angle));

int ey = (int)(y - len * Math.cos(angle));

g.setColor(c);

g.drawLine(x,y,ex,ey);

}

}

----------------ClockTest1.java---------------------

import javax.swing.*;

import java.awt.*;

import java.util.*;

public class ClockTest1 extends JFrame{

/**

* @param args

*/

private Clock clock ;

private Date timeNow;

public ClockTest1(){

super("时钟");

setSize(400,400);

setVisible(true);

}

public void paint(Graphics g){

super.paint(g);

timeNow = new Date();

clock = new Clock(timeNow.getHours(),timeNow.getMinutes(),timeNow.getSeconds());

clock.show(g,170,150,100);

try{

//for(int i =0 ; i 10 ; i += 10)

Thread.sleep(1000);

}catch(InterruptedException e){

}

repaint();

}

public static void main(String[] args) {

// TODO 自动生成方法存根

ClockTest1 appication = new ClockTest1();

appication.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

}

Java 秒表

package demo;

import javax.swing.*;

import java.awt.HeadlessException;

import java.awt.BorderLayout;

import java.awt.FlowLayout;

import java.awt.Font;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

public class Timer extends JFrame {

private static final long serialVersionUID = 1L;

private static final String INITIAL_LABEL_TEXT = "00:00:00 000";

// 计数线程

private CountingThread thread = new CountingThread();

// 记录程序开始时间

private long programStart = System.currentTimeMillis();

// 程序一开始就是暂停的

private long pauseStart = programStart;

// 程序暂停的总时间

private long pauseCount = 0;

private JLabel label = new JLabel(INITIAL_LABEL_TEXT);

private JButton startPauseButton = new JButton("开始");

private JButton resetButton = new JButton("清零");

private ActionListener startPauseButtonListener = new ActionListener() {

public void actionPerformed(ActionEvent e) {

if (thread.stopped) {

pauseCount += (System.currentTimeMillis() - pauseStart);

thread.stopped = false;

startPauseButton.setText("暂停");

} else {

pauseStart = System.currentTimeMillis();

thread.stopped = true;

startPauseButton.setText("继续");

}

}

};

private ActionListener resetButtonListener = new ActionListener() {

public void actionPerformed(ActionEvent e) {

pauseStart = programStart;

pauseCount = 0;

thread.stopped = true;

label.setText(INITIAL_LABEL_TEXT);

startPauseButton.setText("开始");

}

};

public Timer(String title) throws HeadlessException {

super(title);

setDefaultCloseOperation(EXIT_ON_CLOSE);

setLocation(300, 300);

setResizable(false);

setupBorder();

setupLabel();

setupButtonsPanel();

startPauseButton.addActionListener(startPauseButtonListener);

resetButton.addActionListener(resetButtonListener);

thread.start(); // 计数线程一直就运行着

}

// 为窗体面板添加边框

private void setupBorder() {

JPanel contentPane = new JPanel(new BorderLayout());

contentPane.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));

this.setContentPane(contentPane);

}

// 配置按钮

private void setupButtonsPanel() {

JPanel panel = new JPanel(new FlowLayout());

panel.add(startPauseButton);

panel.add(resetButton);

add(panel, BorderLayout.SOUTH);

}

// 配置标签

private void setupLabel() {

label.setHorizontalAlignment(SwingConstants.CENTER);

label.setFont(new Font(label.getFont().getName(), label.getFont().getStyle(), 40));

this.add(label, BorderLayout.CENTER);

}

// 程序入口

public static void main(String[] args) {

try {

UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());

} catch (Exception e) {

e.printStackTrace();

}

Timer frame = new Timer("计时器");

frame.pack();

frame.setVisible(true);

}

private class CountingThread extends Thread {

public boolean stopped = true;

private CountingThread() {

setDaemon(true);

}

@Override

public void run() {

while (true) {

if (!stopped) {

long elapsed = System.currentTimeMillis() - programStart - pauseCount;

label.setText(format(elapsed));

}

try {

sleep(1); // 1毫秒更新一次显示

} catch (InterruptedException e) {

e.printStackTrace();

System.exit(1);

}

}

}

// 将毫秒数格式化

private String format(long elapsed) {

int hour, minute, second, milli;

milli = (int) (elapsed % 1000);

elapsed = elapsed / 1000;

second = (int) (elapsed % 60);

elapsed = elapsed / 60;

minute = (int) (elapsed % 60);

elapsed = elapsed / 60;

hour = (int) (elapsed % 60);

return String.format("%02d:%02d:%02d %03d", hour, minute, second, milli);

}

}

}

你可以试试,希望能帮到你!

Java做的秒表: 代码已有 求高人给中文注释(结构分析)

代码太长,怕吞了。。。

public class TestTimer extends JFrame implements ActionListener, Runnable {

private static TestTimer obj; // 自己的一个静态实例,在这里没什么特别的意思

private JButton btnStart; // 开始按钮

private JButton btnPause; // 暂停按钮

private JButton btnResume; // 恢复按钮

private JButton btnStop; // 停止按钮

private JLabel lblTime; // 显示时间的Label(中文是标签?)

private static Thread th; // 一个用来控制时间的线程

private long count; // 计数

public TestTimer(){

super("秒表"); // TestTimer继承JFrame,这里调用父类的构造方法,传入的参数表示窗口的标题

btnStart = new JButton("开始"); // 初始化按钮,传入的参数表示按钮上显示的文字

btnPause = new JButton("暂停"); // 同上

btnResume = new JButton("继续"); // 同上

btnStop = new JButton("停止"); // 同上

lblTime = new JLabel("00:00:00.000"); // 初始化Label,传入的参数表示Label上显示的文字

this.setLayout(new FlowLayout()); // 设置layout风格为FlowLayout(就是设置控件的摆放方式)

this.add(btnStart); // 将控件加入到窗口中

this.add(btnPause); // 同上

this.add(btnResume); // 同上

this.add(btnStop); // 同上

this.add(lblTime); // 同上

btnStart.addActionListener(this); // 为按钮添加监听器(为什么是this,因为TestTimer类实现了ActionListener接口,所以可以这样用)

btnPause.addActionListener(this); // 为按钮添加监听器(但我不建议这样,这样的话类的职责不明确)

btnResume.addActionListener(this); // 为按钮添加监听器(当然,如果只是实现需求,怕麻烦可以这么做)

btnStop.addActionListener(this); // 为按钮添加监听器

this.setSize(150, 200); // 设置窗口大小

this.setVisible(true); // 显示窗口

}

public static void main(String[] args) {

obj = new TestTimer(); // 主函数入口,初始化实例(其实就是启动窗口)

}

public void actionPerformed(ActionEvent e) {// 这里是实现ActionListener接口的地方

JButton btn = (JButton)e.getSource(); // 获得是哪个按钮触发了事件

if(btn.getText().equals("开始")){ // 如果是开始按钮

th = new Thread(obj); // 初始化一个线程(传入obj是因为,TestTimer类实现了Runnable接口,同样我不建议这样做)

count = 0; // count计数器清零

th.start(); // 线程启动

}

else if(btn.getText().equals("暂停")){ // 如果是暂停按钮

th.suspend(); // 线程挂起(这个方法已经被新版本的JDK遗弃,你可以用,但不推荐用)

}

else if(btn.getText().equals("继续")){ // 如果是继续按钮

th.resume(); // 线程恢复(同上)

}

else if(btn.getText().equals("停止")){ // 如果是停止按钮

th.stop(); // 线程停止(同上)

}

}

@Override

public void run() { // 实现Runnable接口的地方

while(true){ // 无限循环(线程一直运行着记录时间)

int ms, seconds, minutes, hours; // 下面一整段都是根据count这个计数器来计算时间

// 你看到最后有一个Thread.sleep(1)表示该线程每毫秒工作一次,起到计数的作用)

String msg = ""; // msg表示Label上显示的时间

hours = (int)(count / 3600000);

minutes = (int)((count - hours * 3600000) / 60000);

seconds = (int)((count - hours * 3600000 - minutes * 60000) / 1000);

ms = (int)(count % 1000);

if(hours 10){ // 下面这一串是用来做msg的格式

msg += "0" + hours + ":";

}

else{

msg += hours + ":";

}

if(minutes 10){

msg += "0" + minutes + ":";

}

else{

msg += minutes + ":";

}

if(seconds 10){

msg += "0" + seconds + ":";

}

else{

msg += seconds + ":";

}

if(ms 10){

msg += "00" + ms;

}

else if(ms 100){

msg += "0" + ms;

}

else{

msg += ms;

}

lblTime.setText(msg); // 显示时间到Label上

count++; // 计数器递增

try {

Thread.sleep(1); // 线程挂起1毫秒(也即,线程每毫秒执行一次循环)

}

catch (InterruptedException e) { // 异常处理(不必管,必须这样写)

e.printStackTrace();

}

}

}

}


分享文章:java里面秒表的代码 java秒表程序设计
本文URL:http://azwzsj.com/article/hpdsjj.html