java日曆代碼

來源:互聯網
上載者:User

 

下面是一本書上的java行事曆程式代碼。很具有實用性。

package example;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import java.util.GregorianCalendar;

import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;

import java.awt.Font;;

/**
 * 行事曆程式
 */
public class CalenderTrain extends JFrame implements ActionListener {
 /**
  *
  */
 private static final long serialVersionUID = 1L;
 //月份和年份的下拉式清單方塊
 private JComboBox MonthBox=new JComboBox();
 private JComboBox YearBox=new JComboBox();
 //月份和年份的標籤
 private JLabel YearLabel=new JLabel("年份: ");
 private JLabel MonthLabel=new JLabel("月份:");
 //“查看”和“今天”兩個按鈕
 private JButton button_ok=new JButton("查 看");
 private JButton button_today=new JButton("今 天");
 
 //擷取今天的日期,年份,月份
 private Date now_date=new Date();
 private int now_year=now_date.getYear()+1900;
 private int now_month=now_date.getMonth();
 private boolean todayFlag=false; //是否顯示今天的日期
 
 //用一組按鈕顯示日期,一共7行7列,第一行為星期的名字
 private JButton[] button_day=new JButton[42];
 private final String[] week={"日","一","二","三","四","五","六"};
 private JButton[] button_week=new JButton[7];
 private String year_int=null; //儲存使用者選擇的年份
 private int month_int;  //儲存使用者選擇的月份
 
 
 /**
  * 建構函式
  */
 public CalenderTrain(){
  super();
  System.out.print(now_month);
  this.setTitle("日 曆"); //設定標題
  this.init();
  this.setLocation(500,300);
  this.setResizable(true);//設定面板的大小不能變化
  pack();
 }
 
 /**
  *
  * 初始化日曆
  */
 private void init(){
  Font font=new Font("Dialog",Font.BOLD,14);
  YearLabel.setFont(font);
  MonthLabel.setFont(font);
  button_ok.setFont(font);
  button_today.setFont(font);
  //設定年份區間,為當前年份的過去10年到當前年份的未來20年
  for(int i=now_year-10;i<=now_year+20;i++){
   YearBox.addItem(i+"");
  }
  //設定年份下拉式清單為當前年份,當前年份處於第10項
  YearBox.setSelectedIndex(10);
  //設定月份區間,12個月
  for(int i=1;i<=12;i++){
   MonthBox.addItem(i+"");
  }
  //設定月份下拉式清單為當前月份
  MonthBox.setSelectedIndex(now_month);
  
  //放置下拉式清單方塊和控制按鈕的面板
  JPanel panel_ym=new JPanel();
  panel_ym.add(YearLabel);
  panel_ym.add(YearBox);
  panel_ym.add(MonthLabel);
  panel_ym.add(MonthBox);
  panel_ym.add(button_ok);
  panel_ym.add(button_today);
  //為兩個按鈕添加事件監聽器
  button_ok.addActionListener(this);
  button_today.addActionListener(this);
  
  JPanel panel_day=new JPanel();//放置日期面板
  //網格布局管理器,7行7列,網格之間水平和垂直方向間均為5
  panel_day.setLayout(new GridLayout(7,7,3,3));
  //添加星期的名字,並放到面板裡面
  for(int i=0;i<7;i++){
   button_week[i]=new JButton(" ");
   button_week[i].setText(week[i]);
   button_week[i].setForeground(Color.black);
   panel_day.add(button_week[i]);
  }
  button_week[0].setForeground(Color.red);
  button_week[6].setForeground(Color.red);
  //添加日期,放到面板裡面
  for(int i=0;i<42;i++){
   button_day[i]=new JButton(" ");
   panel_day.add(button_day[i]);
  }
  this.paintDay();//顯示當前年月的日期
  
  JPanel panel_main=new JPanel();//放置以上兩個面板
  //邊界布局管理器
  panel_main.setLayout(new BorderLayout());
  panel_main.add(panel_day,BorderLayout.SOUTH);
  panel_main.add(panel_ym,BorderLayout.NORTH);
  getContentPane().add(panel_main);
 }
 
 /**顯示當前年月的日期*/
 private void paintDay(){
  if(this.todayFlag){
   //要求顯示今天的日期
   year_int=now_year+"";
   month_int=now_month;
  }else{
   //否者,從下拉框中擷取使用者的年月
   year_int=YearBox.getSelectedItem().toString();
   month_int=MonthBox.getSelectedIndex();//被選的序號
  }
  int year_sel=Integer.parseInt(year_int)-1900;//獲得年份置
  Date firstDay=new Date(year_sel,month_int,1);//構造該月的第一天
  GregorianCalendar cal=new GregorianCalendar();//建立一個Calendar的執行個體
  cal.setTime(firstDay);
  int days=0;//存放某個月份的天數
  int day_week=0;//存放某個月份的第一天是星期幾的數值
  
  //判斷是幾月份,根據它來設定day的值,其中二月份要判斷是否是閏年
  if(month_int==0||month_int==2||month_int==4||month_int==6||month_int==7
    ||month_int==9||month_int==11){
   days=31;
  }else if(month_int==3||month_int==5||month_int==8||month_int==10){
   days=30;
  }else{
   //二月,如果是閏年,則有29天,否則有28天
   if(cal.isLeapYear(year_sel)){
    days=29;
   }else{
    days=28;
   }
  }
  //getDay方法擷取該天是星期幾
  day_week= firstDay.getDay();
  int count=1;
  /**
   * 繪製按鈕。在這裡首先要根據選定的月份的第一天是星期幾來確定繪製按鈕的起始位置
   * 其中day_week就是我們要繪製的起始位置,對於那些沒有數值可以顯示的按鈕要置空
   */
  for(int i=day_week;i<day_week+days;count++,i++){
   if(i%7==0||i==6||i==13||i==20||i==27||i==34||i==41){
    //如果是邊界上的按鈕,文字用紅色,以來標示周末
    if(i==day_week+now_date.getDate()-1){
     //將與今天一樣的日期用藍色標示
     button_day[i].setForeground(Color.blue);
     button_day[i].setText(count+"");
    }else{
     //其它 邊界上的按鈕中的文字用紅色
     button_day[i].setForeground(Color.red);
     button_day[i].setText(count+"");
    }
   }else{
    if(i==day_week+now_date.getDate()-1){
     //將與今天一樣的日期用藍色標示
     button_day[i].setForeground(Color.blue);
     button_day[i].setText(count+"");
    }else{
     //一般位置的按鈕上的文字用黑色標示
     button_day[i].setForeground(Color.black);
     button_day[i].setText(count+"");
    } 
   }
   
  }
  //對於沒有日期數值顯示的按鈕進行置空處理
  if(day_week==0){
   //如果第一天是周日,則將後米啊的按鈕上的文字都設為空白
   for(int i=days;i<42;i++){
    button_day[i].setText(" ");
   }
  }else{
   //如果第一天不是周日,則將第一天前面的按鈕置空
   for(int i=0;i<day_week;i++){
    button_day[i].setText(" ");
   }
  }
  
 }

 public void actionPerformed(ActionEvent e) {
  if(e.getSource()==button_ok){
   //如果單擊“查看”按鈕就調用setDay()重新方法繪製按鈕
            this.todayFlag=false;
   this.paintDay();
  }else if(e.getSource()==button_today){
   //如果單擊“今天”按鈕,得到今天的日期
   todayFlag=true;
   YearBox.setSelectedIndex(10);
   MonthBox.setSelectedIndex(now_month);
   this.paintDay();
  }

 }

 /**
  * @param args
  */
 public static void main(String[] args) {
  CalenderTrain ct=new CalenderTrain();
  ct.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  ct.setVisible(true);
  //ct.show();
 }
}
 

 

我修改了圖形介面的行事曆程式,可以寫成applet放在網頁上的java apple日曆:

package example;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;
import java.util.GregorianCalendar;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JButton;
import java.awt.Font;;

/**
 * 行事曆程式
 */
public class CalenderCreator extends JFrame implements ActionListener {
 /**
  *
  */
 private static final long serialVersionUID = 1L;
 //“查看”和“今天”兩個按鈕
 private JButton button_left=new JButton("<<");
 private JButton button_right=new JButton(">>");
 private JLabel YearLabel;
 private JLabel MonthLabel;
 private JLabel dayLabel;
 
 //擷取今天的日期,年份,月份
 private Date now_date=new Date();
 private int now_year=now_date.getYear()+1900;
 private int now_month=now_date.getMonth();
 private int nowDay=now_date.getDate();
 
 //用一組按鈕顯示日期,一共7行7列,第一行為星期的名字
 private JLabel[] label_day=new JLabel[42];
 private final String[] week={"日","一","二","三","四","五","六"};
 private JLabel[] label_week=new JLabel[7];
 private String year_int=null; //儲存使用者選擇的年份
 private int month_int=0;    //儲存使用者選擇的月份
 
 /**
  * 建構函式
  */
 public CalenderCreator(){
  super();  
  year_int=Integer.toString(now_year);
  month_int=now_month;
  this.setTitle("日 曆"); //設定標題
  this.init();
  this.setLocation(500,300);
  this.setResizable(false);//設定面板的大小不能變化
  pack();
 }
 
 /**
  *
  * 初始化日曆
  */
 private void init(){ 
  //月份和年份的標籤
  YearLabel=new JLabel(year_int+"年");
  MonthLabel=new JLabel((month_int+1) +"月");
  dayLabel=new JLabel(nowDay+"號");
  
      Font font=new Font("Dialog",Font.BOLD,14);
  YearLabel.setFont(font);
  MonthLabel.setFont(font);
  dayLabel.setFont(font);
  button_left.setFont(font);
  button_right.setFont(font);
  
  //放置下拉式清單方塊和控制按鈕的面板
  JPanel panel_ym=new JPanel();
  panel_ym.add(button_left);
  panel_ym.add(YearLabel);
  panel_ym.add(MonthLabel);
  panel_ym.add(dayLabel);
  panel_ym.add(button_right);
  //為兩個按鈕添加事件監聽器
  button_left.addActionListener(this);
  button_right.addActionListener(this);
  
  JPanel panel_day=new JPanel();//放置日期面板
  //網格布局管理器,7行7列,網格之間水平和垂直方向間均為5
  panel_day.setLayout(new GridLayout(7,7,3,3));
  //添加星期的名字,並放到面板裡面
  for(int i=0;i<7;i++){
   label_week[i]=new JLabel(" ");
   label_week[i].setText(week[i]);
   label_week[i].setForeground(Color.black);
   panel_day.add(label_week[i]);
  }
  label_week[0].setForeground(Color.red);
  label_week[6].setForeground(Color.red);
  //添加日期,放到面板裡面
  for(int i=0;i<42;i++){
   label_day[i]=new JLabel(" ");
   panel_day.add(label_day[i]);
  }
  this.paintDay();//顯示當前年月的日期
  
  JPanel panel_main=new JPanel();//放置以上兩個面板
  //邊界布局管理器
  panel_main.setLayout(new BorderLayout());
  panel_main.add(panel_day,BorderLayout.SOUTH);
  panel_main.add(panel_ym,BorderLayout.NORTH);
  getContentPane().add(panel_main);
 }
 
 /**顯示當前年月的日期*/
 private void paintDay(){
  //月份和年份的標籤
  YearLabel.setText(year_int+"年");
  MonthLabel.setText((month_int+1) +"月");
  //要求顯示今天的日期
  int year_sel=Integer.parseInt(year_int)-1900;//獲得年份置
  Date firstDay=new Date(year_sel,month_int,1);//構造該月的第一天
  GregorianCalendar cal=new GregorianCalendar();//建立一個Calendar的執行個體
  cal.setTime(firstDay);
  int days=0;//存放某個月份的天數
  int day_week=0;//存放某個月份的第一天是星期幾的數值
  
  //判斷是幾月份,根據它來設定day的值,其中二月份要判斷是否是閏年
  if(month_int==0||month_int==2||month_int==4||month_int==6||month_int==7
    ||month_int==9||month_int==11){
   days=31;
  }else if(month_int==3||month_int==5||month_int==8||month_int==10){
   days=30;
  }else{
   //二月,如果是閏年,則有29天,否則有28天
   if(cal.isLeapYear(year_sel)){
    days=29;
   }else{
    days=28;
   }
  }
  //getDay方法擷取該天是星期幾
  day_week= firstDay.getDay();
  int count=1;
  /**
   * 繪製按鈕。在這裡首先要根據選定的月份的第一天是星期幾來確定繪製按鈕的起始位置
   * 其中day_week就是我們要繪製的起始位置,對於那些沒有數值可以顯示的按鈕要置空
   */
  for(int i=day_week;i<day_week+days;count++,i++){
   if(i%7==0||i==6||i==13||i==20||i==27||i==34||i==41){
    //如果是邊界上的按鈕,文字用紅色,以來標示周末
    if(i==day_week+now_date.getDate()-1){
     //將與今天一樣的日期用藍色標示
     label_day[i].setForeground(Color.blue);
     label_day[i].setText(count+"");
    }else{
     //其它 邊界上的按鈕中的文字用紅色
     label_day[i].setForeground(Color.red);
     label_day[i].setText(count+"");
    }
   }else{
    if(i==day_week+now_date.getDate()-1){
     //將與今天一樣的日期用藍色標示
     label_day[i].setForeground(Color.blue);
     label_day[i].setText(count+"");
    }else{
     //一般位置的按鈕上的文字用黑色標示
     label_day[i].setForeground(Color.black);
     label_day[i].setText(count+"");
    } 
   }
   
  }
  //對於沒有日期數值顯示的按鈕進行置空處理
  if(day_week==0){
   //如果第一天是周日,則將後米啊的按鈕上的文字都設為空白
   for(int i=days;i<42;i++){
    label_day[i].setText(" ");
   }
  }else{
   //如果第一天不是周日,則將第一天前面的按鈕置空
   for(int i=0;i<day_week;i++){
    label_day[i].setText(" ");
   }
  }
  
 }

 public void actionPerformed(ActionEvent e) {
  if(e.getSource()==button_left){
   //如果單擊“查看”按鈕就調用setDay()重新方法繪製按鈕
   month_int=month_int-1;
   if(month_int<0){
    month_int=11;
    year_int=Integer.toString(Integer.parseInt(year_int)-1);
   }
   this.paintDay();
  }else if(e.getSource()==button_right){
   //如果單擊“今天”按鈕,得到今天的日期
   month_int=month_int+1;
   if(month_int>11){
    month_int=0;
    year_int=Integer.toString(Integer.parseInt(year_int)+1);
   } 
   this.paintDay();
  }

 }

 public static void main(String[] args) {
  CalenderCreator ct=new CalenderCreator();
  ct.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  ct.setVisible(true);
 }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.