java(线程)实现一个秒表功能
2016-06-24 17:02
561 查看
import java.awt.Container; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.text.NumberFormat; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; public class Miaobiao extends JFrame{ JButton start,pause,stop; JLabel hour,min,sec; Start ss; public static void main(String[] args) { new Miaobiao(); } public Miaobiao(){ /**********Jframe制作一个秒表界面**********/ this.setTitle("秒表"); this.setSize(500, 300); this.setLocationRelativeTo(null); Container c=this.getContentPane(); c.setLayout(null); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); /**********时钟**********/ hour=new JLabel("00"); hour.setBounds(80, 70, 80, 50); hour.setFont(new Font("Consolas", Font.BOLD, 50)); hour.setHorizontalAlignment(JLabel.CENTER); /**********时钟分钟件冒号**********/ JLabel m_1=new JLabel(":"); m_1.setBounds(170, 70, 30, 50); m_1.setFont(new Font("Consolas", Font.BOLD, 50)); /**********分钟**********/ min=new JLabel("00"); min.setBounds(200, 70, 80, 50); min.setFont(new Font("Consolas", Font.BOLD, 50)); min.setHorizontalAlignment(JLabel.CENTER); /**********分钟和秒钟间的冒号**********/ JLabel m_2=new JLabel(":"); m_2.setBounds(290, 70, 30, 50); m_2.s 4000 etFont(new Font("Consolas", Font.BOLD, 50)); /**********秒钟**********/ sec=new JLabel("00"); sec.setBounds(320, 70, 80, 50); sec.setFont(new Font("Consolas", Font.BOLD, 50)); sec.setHorizontalAlignment(JLabel.CENTER); /**********开始按钮**********/ start=new JButton("开始"); start.setBounds(30, 200, 100, 30); start.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { start.setEnabled(false); stop.setEnabled(true); pause.setEnabled(true); ss=new Start(hour,min,sec); ss.start(); } }); /**********暂停按钮**********/ pause=new JButton("暂停"); pause.setBounds(190, 200, 100, 30); pause.setEnabled(false); pause.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { start.setEnabled(true); stop.setEnabled(true); pause.setEnabled(false); new Pause(ss).start(); } }); /**********结束按钮**********/ stop=new JButton("结束"); stop.setBounds(350, 200, 100, 30); stop.setEnabled(false); stop.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { start.setEnabled(true); stop.setEnabled(false); pause.setEnabled(false); new Pause(ss).start(); sec.setText("00"); min.setText("00"); hour.setText("00"); } }); c.add(start); c.add(pause); c.add(stop); c.add(hour); c.add(m_1); c.add(min); c.add(m_2); c.add(sec); this.setVisible(true); } } class Start extends Thread{ JLabel s,m,h; public Start(JLabel h,JLabel m,JLabel s){ this.h=h; this.m=m; this.s=s; } @Override public void run() { int time_s,time_m,time_h; time_s=Integer.parseInt(s.getText()); time_m=Integer.parseInt(m.getText()); time_h=Integer.parseInt(h.getText()); NumberFormat nf = NumberFormat.getInstance(); //调整时间的输出格式 nf.setMinimumIntegerDigits(2) ; //让时分秒都显示为两位数 while (true) { try { Thread.sleep(1000); } catch (InterruptedException e) { break; //如果中断此线程,跳出死循环从而结束线程 } time_s++; if (time_s>=60) { time_m++; time_s=0; //秒钟等于60,分钟加1,秒钟置0 if(time_m>=60){ time_h++; time_m=0; if(time_m>=24){ time_h=0; } } } s.setText(nf.format(time_s)); // 格式化输出 e.g. 0:0:1——>00:00:01 m.setText(nf.format(time_m)); h.setText(nf.format(time_h)); } } } class Pause extends Thread{ Start ss; public Pause(Start ss) { this.ss=ss; } @Override public void run() { ss.interrupt(); } }
“`
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树