import java.awt.Dimension;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
public class Demo {
public static void main(String[] args) {
new MyFrame().setVisible(true);
}
}
class MyFrame extends JFrame {
private JTextField txtBor = new JTextField();//出生日期的文本框
private JLabel lb2 = new JLabel("你来到地球已经: 天了!");//显示结果的JLabel
private JLabel lb3 = new JLabel("你来到地球已经: 年 零 天了!");//作业
public MyFrame(){
init();
addComponent();
}
private void init() {
//1.设置标题
this.setTitle("时间都去哪儿了");
//2.设置大小
this.setSize(500, 400);
//3.让窗体居中
//1).获取Toolkit对象
Toolkit kit = Toolkit.getDefaultToolkit();//此静态方法会返回一个Toolkit的子类对象
//2).获取屏幕大小
Dimension screenSize = kit.getScreenSize();//Dimension类就是封装了一个width和heigth的类;
System.out.println("屏幕宽度:" + screenSize.width + " 像素");
System.out.println("屏幕高度:" + screenSize.height + " 像素");
//3).换算坐标值
int x = (screenSize.width - this.getWidth()) / 2;//(屏幕宽度 - 窗体宽度) / 2
int y = (screenSize.height - this.getHeight()) / 2;//(屏幕高度 - 窗体高度) / 2
//4).为此窗体设置新的坐标值
this.setLocation(x, y);
//4.设置布局管理器
this.setLayout(null);
//5.设置默认关闭行为
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
private void addComponent() {
//1.标签
JLabel lb1 = new JLabel("请输入你的生日:");
lb1.setBounds(100, 60, 120, 30);
this.add(lb1);
//2.文本框
txtBor.setBounds(220, 60, 150, 30);
this.add(txtBor);
//3.结果标签
lb2.setBounds(100, 130, 300, 30);
this.add(lb2);
//4.年标签
lb3.setBounds(100, 170, 300, 30);
this.add(lb3);
//4.计算按钮
JButton but = new JButton("计算");
but.setBounds(300, 220, 70, 30);
but.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent e) {
try {
butClick();
} catch (ParseException e1) {
e1.printStackTrace();
}
}});
this.add(but);
}
//计算按钮
protected void butClick() throws ParseException {
//1.获取文本框中的数据
String dateStr = this.txtBor.getText();
//2.验证文本格式,内容
//1).验证第5位和第8位上是否是"-"
char c1 = dateStr.charAt(4);
char c2 = dateStr.charAt(7);
if(c1 != '-' || c2 != '-'){
JOptionPane.showMessageDialog(this, "非法的日期格式,请参照:xxxx-xx-xx格式编写!");
return;
}
//2).验证其它的部分必须为数字
String year = dateStr.substring(0,4);
String month = dateStr.substring(5,7);
String day = dateStr.substring(8);//从8到末尾
if(!checkDate(year) || !checkDate(month) || !checkDate(day)){
JOptionPane.showMessageDialog(this, "非法的日期格式,请参照:xxxx-xx-xx格式编写!");
return;
}
//将String的年月日转换为int的值
int intYear = Integer.valueOf(year);
int intMonth = Integer.valueOf(month);
int intDay = Integer.valueOf(day);
//3).如果是2月,要判断闰年:闰年2月29天,平年2月28
String sr = txtBor.getText();
int s = Intesge.parseInt(sr.subSequence(1, 5));
//4).如果是小月,日期1--30
//5).如果是大月,日期1--31
//6).年份必须大于等于1970,并且小于今天的年份
//7).计算生日的毫秒值:String-->Date-->毫秒值
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Date borDate = sdf.parse(dateStr);//将String转换为Date
long mi1 = borDate.getTime();
//8).计算当前时间的毫秒值
long mi2 = System.currentTimeMillis();
//9).计算出生到现在的天数
int days = (int)((mi2 - mi1) / 1000 / 3600 / 24);
//10).设置标签
this.lb2.setText("你来到地球已经:" + days + " 天了!");
}
//编写一个方法,可以验证一个字符串中是否全部是数字字符
public static boolean checkDate(String dateStr){
for(int i = 0;i < dateStr.length(); i++){//遍历字符串
char c = dateStr.charAt(i);
if(c < '0' || c > '9'){
return false;//表示:包含了非法的非数字字符
}
}
return true;//表示:包含的全部都是数字字符
}
}
|
|