Java Swing 秒表
2016-05-07 22:04
459 查看
作业:让实现一个秒表。
拖了一个月,這两天各种查资料,各种调试,终于暂时可以用了。还有些样式和稳定性的问题,待改善。
Clock.java
//ClockFrame.java
![](http://img.blog.csdn.net/20160507220952866?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
点击开始
![](http://img.blog.csdn.net/20160507220959651?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
点击计次
拖了一个月,這两天各种查资料,各种调试,终于暂时可以用了。还有些样式和稳定性的问题,待改善。
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; } }运行结果:
点击开始
点击计次
相关文章推荐
- 维护代码简洁,使用lombok消除冗长的Java代码
- Java学习4_一些基础4_输入输出_16.5.7
- 如何定义 Java 中的方法(二)
- java Io流中对象序列化和反序列问题
- Spring MVC 4 文件上传下载 Hibernate+MySQL例子 (带源码)
- java 程序的格式
- java回调函数
- 不惑JAVA之JAVA基础 - 锁 -synchronized、Lock解析
- java基础知识学习笔记(三)
- openjdk7的编译
- java编程eclipse常用快捷键方式
- java统计文本中的不同的单词和重复的单词
- 简易SpringIOC容器(初学)
- 一个经典例子让你彻彻底底理解java回调机制
- 传智播客java学习内容
- 《JAVA高级程序设计》第六周作业
- 20145203盖泽双 《Java程序设计》第十周学习总结
- java多线程学习-java.util.concurrent详解(三)ScheduledThreadPoolExecutor
- Java学习3_一些基础3_16.5.7
- Spring的DAO模块