时间管理系统Java Swing ,计时器,类似于番茄时间功能

    技术2022-07-13  97


    package 时间管理系统; import java.awt.Color; import java.awt.Font; import java.awt.HeadlessException; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; import javax.swing.JButton; import javax.swing.JComboBox; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.Timer; import javax.swing.UIManager; public class ManagerTime 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 CountingThread thread2 = new CountingThread(); // 记录程序开始时间 private long startworktime = System.currentTimeMillis();// 开始工作时间 private long startstudytime = System.currentTimeMillis();// 开始学习时间 private int aimwtime = 0;// 目标工作时间 private int aimstime = 0;// 目标学习时间 // 程序一开始就是暂停的 private long pauseworktime = startworktime; private long pausestudytime = startstudytime; // 程序暂停的总时间 private long pauseCountw = 0; private long pauseCounts = 0; JPanel panel = new JPanel(); JLabel wtimeCount = new JLabel(INITIAL_LABEL_TEXT); JLabel stimeCount = new JLabel(INITIAL_LABEL_TEXT); JLabel time = new JLabel(); JLabel myname = new JLabel("我的时间管理系统"); JLabel workgoal = new JLabel("今日工作目标"); JComboBox<Integer> targetime = new JComboBox<Integer>(); JLabel unittime = new JLabel("小时"); JLabel studygoal = new JLabel("今日学习目标"); JComboBox<Integer> targetime1 = new JComboBox<Integer>(); JLabel unittime1 = new JLabel("小时"); JLabel wtime = new JLabel("今日已工作:"); JLabel wtimeresult = new JLabel(); JLabel stime = new JLabel("今日已学习:"); JLabel stimeresult = new JLabel(); JButton startwork = new JButton("开始工作"); JButton startstudy = new JButton("开始学习"); ActionListener startworkButtonListener = new ActionListener() { public void actionPerformed(ActionEvent e) { if (thread.stopped) { pauseCountw += (System.currentTimeMillis() - pauseworktime); thread.stopped = false; startwork.setText("暂停"); } else { pauseworktime = System.currentTimeMillis(); thread.stopped = true; startwork.setText("继续"); } } }; ActionListener startstudyButtonListener = new ActionListener() { public void actionPerformed(ActionEvent e) { if (thread2.stopped2) { pauseCounts += (System.currentTimeMillis() - pausestudytime); thread2.stopped2 = false; startstudy.setText("暂停"); } else { pausestudytime = System.currentTimeMillis(); thread2.stopped2 = true; startstudy.setText("继续"); } } }; public ManagerTime(String title) throws HeadlessException { super(title); this.setDefaultCloseOperation(EXIT_ON_CLOSE); this.setSize(480, 640); // 设置组件的大小 this.setBackground(Color.WHITE); // 将背景设置成白色 this.setLocation(300, 200); this.add(setupComponent(panel)); startwork.addActionListener(startworkButtonListener); startstudy.addActionListener(startstudyButtonListener); thread.start(); thread2.start(); } private JPanel setupComponent(JPanel panel) { // panel= new JPanel(); panel.setLayout(null); myname.setForeground(Color.BLUE); myname.setBounds(130, 10, 300, 30); myname.setFont(new Font("微软雅黑", Font.BOLD, 20)); panel.add(myname); time.setForeground(Color.BLUE); time.setBounds(130, 50, 300, 30); time.setFont(new Font("微软雅黑", Font.BOLD, 20)); ; panel.add(timeshow(time)); workgoal.setForeground(Color.RED); workgoal.setBounds(10, 100, 80, 25); panel.add(workgoal); ItemListener itemListener = new ItemListener() { @Override public void itemStateChanged(ItemEvent arg0) { // TODO Auto-generated method stub if (ItemEvent.SELECTED == arg0.getStateChange()) { String selectedItem = arg0.getItem().toString(); aimwtime = Integer.parseInt(selectedItem); System.out.printf("new selected item : %s%n", selectedItem); System.out.println("www " + aimwtime); } if (ItemEvent.DESELECTED == arg0.getStateChange()) { String selectedItem = arg0.getItem().toString(); System.out.printf("deselected item : %s%n", selectedItem); } } }; targetime.addItemListener(itemListener); targetime.setEnabled(true); targetime.addItem(1); targetime.addItem(2); targetime.addItem(3); targetime.addItem(4); targetime.addItem(5); targetime.setBounds(100, 100, 50, 25); targetime.setForeground(Color.RED); panel.add(targetime); unittime.setBounds(150, 100, 50, 25); unittime.setForeground(Color.RED); panel.add(unittime); studygoal.setBounds(200, 100, 80, 25); studygoal.setForeground(Color.RED); panel.add(studygoal); ItemListener itemListener1 = new ItemListener() { @Override public void itemStateChanged(ItemEvent arg0) { // TODO Auto-generated method stub if (ItemEvent.SELECTED == arg0.getStateChange()) { String selectedItem = arg0.getItem().toString(); aimstime = Integer.parseInt(selectedItem); System.out.printf("new selected item : %s%n", selectedItem); } if (ItemEvent.DESELECTED == arg0.getStateChange()) { String selectedItem = arg0.getItem().toString(); System.out.printf("deselected item : %s%n", selectedItem); } } }; targetime1.addItemListener(itemListener1); targetime1.setEnabled(true); targetime1.addItem(1); targetime1.addItem(2); targetime1.addItem(3); targetime1.addItem(4); targetime1.addItem(5); targetime1.setBounds(280, 100, 50, 25); targetime1.setForeground(Color.RED); panel.add(targetime1); unittime1.setBounds(330, 100, 50, 25); unittime1.setForeground(Color.RED); panel.add(unittime1); wtime.setBounds(100, 150, 80, 25); panel.add(wtime); wtimeCount.setBounds(180, 150, 100, 25); panel.add(wtimeCount); wtimeresult.setBounds(280, 150, 180, 25); panel.add(wtimeresult); stime.setBounds(100, 250, 80, 25); panel.add(stime); stimeCount.setBounds(180, 250, 100, 25); panel.add(stimeCount); stimeresult.setBounds(280, 250, 180, 25); panel.add(stimeresult); startwork.setBounds(100, 450, 100, 25); panel.add(startwork); startstudy.setBounds(250, 450, 100, 25); panel.add(startstudy); return panel; } public JLabel timeshow(JLabel time) { final JLabel varTime = time; Timer timeAction = new Timer(100, new ActionListener() { public void actionPerformed(ActionEvent e) { long timemillis = System.currentTimeMillis(); // 转换日期显示格式 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); varTime.setText(df.format(new Date(timemillis))); } }); timeAction.start(); return time; } private class CountingThread extends Thread { public boolean stopped = true; public boolean stopped2 = true; private CountingThread() { setDaemon(true); } @Override public void run() { while (true) { if (!stopped) { long elapsed = System.currentTimeMillis() - startworktime - pauseCountw; wtimeCount.setText(convertDate(elapsed)); // 计算目标是否完成 long awt = aimwtime * 3600000; if (elapsed == awt) { wtimeresult.setText("今日工作目标已完成"); } } if (!stopped2) { long elapsed = System.currentTimeMillis() - startstudytime - pauseCounts; stimeCount.setText(convertDate(elapsed)); long ast = aimstime * 3600000; if (elapsed == ast) { stimeresult.setText("今日学习目标已完成!!!!"); } } 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("d:d:d d", hour, minute, second, milli); } } private String convertDate(long elapsed) { return new SimpleDateFormat("HH:mm:ss.SSS").format(new Date(elapsed - TimeZone.getDefault().getRawOffset())); } // 程序入口 public static void main(String[] args) { try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { e.printStackTrace(); } ManagerTime frame = new ManagerTime("时间管理系统"); frame.setVisible(true); } }

    运行截图如下如所示:

     

    Processed: 0.018, SQL: 9