Java Swing 秒表

作业:让实现一个秒表。

拖了一个月,這两天各种查资料,各种调试,终于暂时可以用了。还有些样式和稳定性的问题,待改善。


Clock.java

import java.text.ParseException;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JFrame;
import com.yf.SwingConsole;
public class Clock {
	public static void main(String[] args) {		
		// TODO Auto-generated methosd stub
		ClockFrame clockframe=new ClockFrame();
		clockframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		clockframe.setSize(400,530);
		clockframe.setVisible(true);		
	}
}

//ClockFrame.java

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.border.Border;
import javax.swing.table.DefaultTableModel;

public class ClockFrame extends JFrame {
	SimpleDateFormat sdf = new SimpleDateFormat("hh:mm:ss.SSS");
	SimpleDateFormat sdfDistance = new SimpleDateFormat("mm:ss.SSS");
	private JTextField nowTime;
	private JButton startBt;
	private JButton resetBt;
	public long start = 0;
	// private int line=1;//记录行数
	private String beforeTime = "";// 上一次时间
	private JScrollPane countPane;
	private DefaultTableModel defaultModel = null;
	private JTable table;

	public ClockFrame() {
		nowTime = new JTextField("00:00.000");
		startBt = new JButton("开始");
		resetBt = new JButton("计次");

		String[] name = { "序号", "时间", "时间差" };
		String[][] data = new String[1][3];
		defaultModel = new DefaultTableModel(data, name);
		table = new JTable(defaultModel);
		table.setPreferredScrollableViewportSize(new Dimension(400, 400));
		countPane = new JScrollPane(table);
		setLayout(null);
		add(nowTime);
		nowTime.setBounds(0, 0, 400, 80);
		nowTime.setBackground(Color.getHSBColor(88,89,185));
		nowTime.setForeground(Color.BLUE);
		Font font=new Font("隶书",Font.BOLD,50);
		nowTime.setFont(font);
		nowTime.setHorizontalAlignment(JTextField.CENTER);
		nowTime.setVisible(true);
		add(startBt);
		startBt.setBounds(0, 80, 200, 50);
		startBt.setVisible(true);
		add(resetBt);
		resetBt.setBounds(200, 80, 200, 50);
		resetBt.setVisible(true);
		add(countPane);
		countPane.setBounds(0, 130, 400, 400);
		countPane.setVisible(true);
		// add(countTb);
		startBt.addActionListener(new MyActionListener());
		resetBt.addActionListener(new MyActionListener());
	}

	class countTask extends TimerTask {
		@Override
		public void run() {
			SimpleDateFormat sdfDistance = new SimpleDateFormat("mm:ss.SSS");
			nowTime.setText(sdfDistance.format(System.currentTimeMillis() - start));
		}
	}

	class MyActionListener implements ActionListener {

		Date date = new Date();
		Timer timer = null;
		int line = 0;
		long now = 0, bebefore = 0, nowdistance = 0;

		public void actionPerformed(ActionEvent e) {
			start = date.getTime();
			if (e.getActionCommand().equals("开始")) {
				startBt.setText("暂停");
				resetBt.setText("计次");
				//if (timer == null) {
					timer = new Timer();
					timer.schedule(new countTask(), 0, 10);
				//}
			}
			if (e.getActionCommand().equals("暂停")) {
				if (timer != null) {
					timer.cancel();
					timer = null;
				}
				try {
					Date screen = sdfDistance.parse(nowTime.getText());
					System.out.println("the date toString is " + screen.toString());
					long screenValue = GetTime(nowTime.getText());
					System.out.println(screenValue);
					System.out.println(new Date().getTime());
				} catch (ParseException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				startBt.setText("开始");
				resetBt.setText("重置");
			}
			if (e.getActionCommand().equals("重置")) {
				nowTime.setText("00:00.000");
				resetBt.setText("计次");
				// timer.cancel();
				// getRowCount返回行数,rowcount<0代表已经没有任何行了。
				int rowcount = defaultModel.getRowCount() - 1;
				for (int i = rowcount - 1; i >= 0; i--) {
					defaultModel.removeRow(i);
				}
			}
			if (e.getActionCommand().equals("计次")) {
				// 动态添加表格
				defaultModel.addRow(new Vector());
				// 为表格赋值
				++line;
				defaultModel.setValueAt(line + "", line - 1, 0);
				defaultModel.setValueAt(nowTime.getText(), line - 1, 1);
				// System.out.println("行数:"+(line++));
				System.out.println("现在时间:" + nowTime.getText());
				System.out.println("之前时间:" + beforeTime);
				now = GetTime(nowTime.getText());
				bebefore = GetTime(beforeTime);
				nowdistance = now - bebefore;
				defaultModel.setValueAt(sdfDistance.format(nowdistance) + "", line - 1, 2);
				System.out.println("现在时间转换成:" + now);
				System.out.println("之前时间转换成:" + bebefore);
				System.out.println("时间差:" + nowdistance);
				System.out.println("时间差转化成" + sdfDistance.format(nowdistance));
				System.out.println("测试能不能输出");
				System.out.println();
				beforeTime = nowTime.getText();
			}
			// 刷新表格
			table.revalidate();
		}
	}

	public long GetTime(String time) {
		long before = 0;
		if ((time == "") || (time == "00:00.000")) {
			before = 0;
		}
		// subString(start,end),取从start到end 字符串
		else {
			int front = Integer.parseInt(time.substring(0, 2));
			int middle = Integer.parseInt(time.substring(3, 5));
			int rear = Integer.parseInt(time.substring(6, time.length()));
			before = front * 60000 + middle * 1000 + rear;
		}
		return before;
	}
}
运行结果:


点击开始


点击计次


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值