2011年3月26日

<Java> JVA310-年齡計算





import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class JVA310 extends JFrame{
        private JPanel jp1; //放置輸入出生年月日元件
        private JTextField ty,tm,td;
        private JLabel label1,label2,label3,label4;
        private JButton b;
        private int year,month,day;
        private int yearNow,monthNow,dayNow;
        private int result;
        private int md[]={0,31,29,31,30,31,30,31,31,30,31,30,31};
        public JVA310(){
                super("計算年齡");
                Container con = getContentPane();
                jp1 = new JPanel();
                jp1.setLayout(new FlowLayout(FlowLayout.CENTER));
                //求得目前系統日期
                Calendar cal = Calendar.getInstance();
                //求得目前系統的西元年
                yearNow = cal.get(Calendar.YEAR);
                //求得目前系統的月份(一月會回傳0,故加1後才是真正的月份)
                monthNow = cal.get(Calendar.MONTH)+1;
                //求得目前系統的日期
                dayNow = cal.get(Calendar.DATE);
             
                //設定GUI
                label4 = new JLabel("請輸入出生年月日",JLabel.CENTER);
                con.add(label4,BorderLayout.NORTH);
                label1 = new JLabel("年(YYYY)");
                jp1.add(label1);
                ty= new JTextField(4);
                jp1.add(ty);
                label2 = new JLabel("月(MM)  ");
                jp1.add(label2);
                tm= new JTextField(4);
                jp1.add(tm);
                label3 = new JLabel("日(dd)  ");
                jp1.add(label3);
                td= new JTextField(4);
                jp1.add(td);
                con.add(jp1,BorderLayout.CENTER);
                b =  new JButton("計算結果");
                //該按鈕被按下時的事件驅動
                b.addActionListener(
                   new ActionListener(){
                        public void actionPerformed(ActionEvent e){
                            try{
                                  //檢查是否有欄位沒填入資料
                                  if((ty.getText()==null)||(tm.getText()==null)||(td.getText()==null)  )
                                    JOptionPane.showMessageDialog(null,"請輸入完整的出生年月日");
                                 else {
                         //取得輸入的西元年
                         year = Integer.parseInt(ty.getText());
                         //取得輸入的月份
                         month = Integer.parseInt(tm.getText());
                         //取得輸入的日
                         day = Integer.parseInt(td.getText());
                       //檢查是否所輸入出生年月日不正確
                       if( (year>yearNow)||(year<1)||(month>12)||(month<1) ) /
                            JOptionPane.showMessageDialog(null,"所輸入的出生年月日不正確");
                         else if(day>md[month] || day<1){
                            JOptionPane.showMessageDialog(null,"所輸入的出生年月日不正確");
                         }
                         else
                         {
                           //計算實際年齡
                           if( monthNow > month )
                             result = yearNow - year ;
                           else if( (monthNow == month)&&(dayNow>=day) )
                             result = yearNow - year;
                           else
                             result = yearNow - year - 1  ;

                             //印出實際年齡
                             JOptionPane.showMessageDialog(null,"你現在的實際年齡為"+result+"歲");
                            }
                          }
                        }catch(Exception ee){
                             JOptionPane.showMessageDialog(null,"所輸入的出生年月日不正確");
                        }
                      }
                    }
                );
                con.add(b,BorderLayout.SOUTH);

                //設定JFrame大小
                setSize(150,180);
                //讓JFrame不能設定大小
                setResizable(false);
                setVisible(true);
        }
        public static void main(String args[]){
                JVA310 age=new JVA310();
                //讓JFrame結束的事件驅動
                age.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        }
}

2 則留言:

  1. 您好~
    如果輸入為空的話
    這個程式好想不能執行到這一段
    JOptionPane.showMessageDialog(null,"請輸入完整的出生年月日");

    不會顯示 請輸入完整的出生年月日
    卻顯示 所輸入的出生年月日不正確

    回覆刪除
  2. 您好~
    我找到解決辦法了
    if((ty.getText()==null)||(tm.getText()==null)||(td.getText()==null) )

    將判斷式內容改成 .getText().equals("") 可以判斷

    回覆刪除