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);
}
}
运行截图如下如所示: