计时器 川长思鸟来 2022-03-31 14:23 212阅读 0赞 package MYDemo; /*定义一个计时器,点击开始按钮以后开始运行,每隔1ms开始计时,点击停止按钮停止计时, * 计时器常用timer类或多线程来实现,有空要了解一下Timer类。 */ import java.awt.*; import javax.swing.*; import java.awt.event.*; import java.util.Scanner; // 定义一类,用来表示时间的运行 class TimeRun extends Thread implements ActionListener { static JFrame jf=new JFrame();//定义窗体 JLabel jl=new JLabel("时间"); JTextField jtf=new JTextField(" "); JLabel jl2=new JLabel("秒"); JButton start=new JButton("开始"); JButton stop=new JButton("暂停"); JButton clear=new JButton("清零"); JPanel jp1=new JPanel(); //定义面板 JPanel jp2=new JPanel(); private float time=0; private static boolean Run=false;//运行标识 public static void main(String []args) { //定义窗体的参数 jf.setSize(300,100); jf.setTitle("秒表"); jf.setVisible(true); jf.setLocation(500,500); TimeRun tr=new TimeRun(); tr.run(); } //定义小时,分钟,秒的显示 private String time2str(float t) {//文本框中的内容显示 int h = (int)t/36000; int m = ((int)t-h*36000)/600; double s = (t%600)/10.00; return String.format(" %02d : %04.1f", m,s); } //向窗体中加入各种组件并设置其位置。 public TimeRun(){ jl.setAlignmentX(JLabel.CENTER_ALIGNMENT); jl2.setAlignmentX(JLabel.CENTER_ALIGNMENT); jtf.setHorizontalAlignment(JTextField.CENTER); jtf.setColumns(15); jp1.add(jl,BorderLayout.WEST); jp1.add(jtf,BorderLayout.CENTER); jp1.add(jl2,BorderLayout.EAST); jp2.setLayout(new FlowLayout()); jp2.add(start); jp2.add(stop); jp2.add(clear); //定义布局 jf.add(jp1,BorderLayout.CENTER); jf.add(jp2,BorderLayout.SOUTH); jf.setVisible(true); start.addActionListener(this); stop.addActionListener(this); clear.addActionListener(this); } //时间运行主要的部分,如果run为真,则时间每隔1ms递增, public void run() { float time = 0; jtf.setText(time2str(time)); while (!this.isAlive() && !this.isInterrupted()) { if (Run) {//若可运行,则显示。每隔1ms时间递增。 jtf.setText(time2str(time)); //System.out.println(time2str(time)); try { Thread.sleep(100);//每隔1ms计时 } catch (InterruptedException e1) { } time += 1; } } } //监听器事件,点击不同的按钮,则显示不同时间操作,点击按钮以后,判断运行标识发生变化,其他按钮 //不可以点击,同时窗体的名称也发生变化。 public void actionPerformed(ActionEvent e){ String event=e.getActionCommand(); if(event=="开始"){ jf.setTitle("Start..."); Run=true; start.setEnabled(false); stop.setEnabled(true); clear.setEnabled(false); }else if(event=="暂停"){ Run=false; jf.setTitle("Pause..."); stop.setEnabled(false); start.setEnabled(true); clear.setEnabled(true); }else if(event=="清零"){ time=0; Run=false; jtf.setText(""+time); jf.setTitle("Clean...");//窗体的标题发生了改变 start.setEnabled(true); stop.setEnabled(false); clear.setEnabled(false); } } } 运行结果:![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTc5MjE2Mg_size_16_color_FFFFFF_t_70] [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MTc5MjE2Mg_size_16_color_FFFFFF_t_70]: /images/20220331/636a8fc8c0474cf99f5fef9bea29d098.png
还没有评论,来说两句吧...