MainFrame.java
package ui;
import java.awt.Component;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import java.util.Formatter;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.DocumentEvent;
import javax.swing.event.DocumentListener;
import act.OkActionThread;
public class MainFrame {
private Date today;
public static JLabel Label[];
private GridBagLayout gridBag;
private JFrame jfrmMain;
private Container con;
private JLabel intervalRadio;
private JCheckBox chkBox;
private JTextField minuteText;
private JButton jbutOK, jbutCancel;
private int minLeft = 0;
private String msg[] = { "当前时间", "", "订于", "分钟后", "订于", "提醒", "现在还差", "0秒" };
public static void main(String[] args) {
new MainFrame();
}
public MainFrame() {
initAlarmClock();
}
/* 设置字符串,元素为界面显示的组件名称 */
/* 函数实现所有界面初始化 */
private void initAlarmClock() {
int i;
today = new Date();
jfrmMain = new JFrame("小闹钟");
gridBag = new GridBagLayout();
GridBagConstraints gridBagConstraints = new GridBagConstraints();
gridBagConstraints.fill = GridBagConstraints.BOTH;// 在水平方向和垂直方向上同时调整组件大小。
con = jfrmMain.getContentPane();
con.setLayout(gridBag);
jfrmMain.setSize(400, 400);
// 标签导入
Label = new JLabel[msg.length];
for (i = 0; i < Label.length; i++)
Label[i] = new JLabel(msg[i], JLabel.CENTER);
// Label:“当前时间”
gridBagConstraints.gridwidth = 1;// 指定组件显示区域的某一行中的单元格数
gridBagConstraints.gridheight = 2;// 指定在组件显示区域的一列中的单元格数。
gridBagConstraints.insets = new Insets(0, 0, 5, 0);// 此字段指定组件的外部填充,即组件与其显示区域边缘之间间距的最小量。
addComponents(Label[0], gridBagConstraints);
// Label:显示出当前时间
gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
Label[1].setText(TimeToString(today));
addComponents(Label[1], gridBagConstraints);
// Label:间隔时间
gridBagConstraints.gridwidth = 1;
intervalRadio = new JLabel("间隔时间");
addComponents(intervalRadio, gridBagConstraints);
// Label:“订于”
addComponents(Label[2], gridBagConstraints);
// JTextField: minLeft
minuteText = new JTextField("1", 6);
minuteText.getDocument().addDocumentListener(new DocumentListener() {
@Override
public void removeUpdate(DocumentEvent documentevent) {
System.out.println("Text Inserted:" + minuteText.getText());
}
@Override
public void insertUpdate(DocumentEvent documentevent) {
System.out.println("Text Inserted:" + minuteText.getText());
}
@Override
public void changedUpdate(DocumentEvent documentevent) {
System.out.println("Text Inserted:" + minuteText.getText());
}
});
addComponents(minuteText, gridBagConstraints);
// Label: “分钟后”
gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
addComponents(Label[3], gridBagConstraints);
// Label:“现在还差”
gridBagConstraints.gridwidth = 1;
addComponents(Label[6], gridBagConstraints);
// Label:“0秒”
gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
Label[7].setText(minLeft + "秒");
addComponents(Label[7], gridBagConstraints);
// JCheckBox :"蹦出来"
gridBagConstraints.gridwidth = 1;
chkBox = new JCheckBox("蹦出来", true);
addComponents(chkBox, gridBagConstraints);
// JPanel
JPanel panel = new JPanel();
panel.setLayout(new FlowLayout());
// JButton jbutOK
jbutOK = new JButton("确定");
jbutOK.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
minLeft = 60 * Integer.parseInt(minuteText.getText());// 1min =
// 60s
// 点击“确定”时,开始倒计时
// // -------> 第一种:Timer方式 <--------
// new Thread(new OkActionThread(minLeft)).start();
// -------> 第二种:Timer方式 <--------
final Timer timer=new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
Label[7].setText(minLeft-- + "秒");
if(minLeft==-1)
timer.cancel();
}
}, 0, 1000);
System.out.println("------" + Label[7].getText());
}
});
// JButton jbutCancel
jbutCancel = new JButton("取消");
panel.add(jbutOK);
panel.add(jbutCancel);
gridBagConstraints.gridwidth = GridBagConstraints.REMAINDER;
addComponents(panel, gridBagConstraints);
jfrmMain.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jfrmMain.setVisible(true);
}
/* 设置函数将目标组obj件加入容器c */
private void addComponents(Component obj,
GridBagConstraints gridBagConstraints) {
gridBag.setConstraints(obj, gridBagConstraints);
con.add(obj);
}
/* 函数实现将时间类型编程字符串类型 */
private String TimeToString(Date day) {
Formatter fmt = new Formatter();
fmt.format("%tT", day);
return fmt.toString();
}
}
OkActionThread.java
package act;
import ui.MainFrame;
public class OkActionThread implements Runnable {
private int minLeft = 0;
public OkActionThread(int minLeft) {// seconds
System.out.println( "==== OkActionThread() ====" );
this.minLeft = minLeft;
}
@Override
public void run() {
while (minLeft-- != 0) {
MainFrame.Label[7].setText(minLeft + "秒");
System.out.println( minLeft );
try {
new Thread();
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}