⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calendar.java

📁 日历系统 用于显示日历效果 用简单的JAVA编程
💻 JAVA
字号:
import java.io.*;                                //导出需要使用的包
import java.awt.BorderLayout; 
import java.awt.Color; 
import java.awt.GridLayout; 
import java.awt.Toolkit; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener;
import java.awt.event.*; 
import java.sql.Date; 
import java.util.Calendar; 
import java.util.GregorianCalendar; 
import java.util.*;
import java.awt.Font; 
import java.awt.Graphics; 
import javax.swing.JComboBox;
import javax.swing.*;  
import javax.swing.JFrame; 
import javax.swing.JLabel; 
import javax.swing.JPanel; 
import javax.swing.border.*; 


public class CALENDAR extends JFrame{               //定义PUBLIC类继承了JFRAME容器

// 构造器, 建立图形界面
JButton Baocun = new JButton("日历保存");           //用NEW创建保存按钮对象
JPanel panel   = new JPanel(new BorderLayout());    //用NEW创建Panel面板(想法:用于后面的大的面板)对象
JPanel panel1  = new JPanel();                      //用NEW创建Panel1面板(想法:用于北边)的对象
JPanel panel2  = new JPanel(new GridLayout(7, 7));  //用NEW创建Panel2面板(想法:用于中间)布局是7*7的label的对象
JPanel panel3  = new JPanel();                      //用NEW创建Panel3面板(想法:用于南边)
JLabel[] label = new JLabel[49];                    //用NEW创建LABEL对象
    String[] s = new String[49];                    //并将Lable对象定义为字符串数组
JLabel y_label = new JLabel("年");                  //创建“年”标签
JLabel m_label = new JLabel("月");                  //创建“月”标签
JComboBox com1 = new JComboBox();                   //创建一个下拉菜单(用于“年”)
JComboBox com2 = new JComboBox();                   //创建一个下拉菜单(用于“月”)

//定义一些变量并将CALENDAR实例化 
Font font = new Font("dialog",Font.PLAIN,13);        //设置字体(字体是dialog,字形是PLAIN,字号为13)
int re_year, re_month;                               //定义变量 
int x_size, y_size; 
int mm,yy,rr;                          
String bin=getMonthEnglish(Calendar.getInstance().get(Calendar.MONTH));
String year_num; 
Calendar now = Calendar.getInstance(); // 将Calendar实例化。    实例化方法都写在getInstance()方法里

//构造函数
CALENDAR() {                         
super("颜晓春日历"); 
setSize(400, 300);                   //设置大小
x_size = (int) (Toolkit.getDefaultToolkit().getScreenSize().getWidth()); 
y_size = (int) (Toolkit.getDefaultToolkit().getScreenSize().getHeight()); 
setLocation((x_size - 300) / 2, (y_size - 350) / 2); 
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
panel1.add(com1);           //将COM1(年的下拉菜单)添加到面板1中
panel1.add(y_label);        //将“年”标签添加到面板1中
panel1.add(com2);           //将COM2(月的下拉菜单)添加到面板1中
panel1.add(m_label);        //将“月”标签添加到面板1中

for (int i = 0; i < 49; i++) {            //每49个Label做一次循环
label[i] = new JLabel("", JLabel.CENTER); // 将显示的字符设置为居中 
panel2.add(label[i]);                     //将label加到面板2中
} 

//设置布局
panel.add(panel1, BorderLayout.NORTH);     //将panel1布局在北边并添加到panel中
panel.add(panel2, BorderLayout.CENTER);    //将panek2布局在中间并添加到panel中
panel3.add(Baocun);                        //将baocun(保存)按钮添加到panel3中
panel.add(panel3, BorderLayout.SOUTH);     //将panel3布局在南边并添加到panel面板中

panel.setBackground(Color.blue);       //设置整个模块的背景色
panel1.setBackground(Color.cyan);      //设置底部模块的背景色
panel2.setBackground(Color.lightGray); //设置中间模块的背景色
panel3.setBackground(Color.white);     //设置底部模块的背景色
Init(); 
com1.addActionListener(new ClockAction());       // 对COM1组件注册监听内部类
com2.addActionListener(new ClockAction());       // 对COM2组件注册监听内部类

setContentPane(panel); //javax.swing.JFrame 包中的方法,此方法是JFrame实现接口RootPaneContainer中定义的方法
setVisible(true);      //组件显示为可见
setResizable(true);    //大小可改变
} 


 // 设置监听器来监听所有事件源产生的事件,便于处理事件代码模块化
class ClockAction implements ActionListener {            

public void actionPerformed(ActionEvent arg0) { 

int c_year, c_month, c_week; 

c_year = Integer.parseInt(com1.getSelectedItem().toString());     // 得到当前所选年份 

yy=c_year;

c_month = Integer.parseInt(com2.getSelectedItem().toString()) - 1; // 得到当前月份,并减1,计算机中的月为0-11 

mm=c_month+1;

     
      //判断月份
 		switch(mm)
 		{
 			case 1:
 				bin="January";  break;
 			case 2:
 				bin="February"; break;
 			case 3:
 				bin="March";    break;
 			case 4:
 				bin="April";    break;
 			case 5:
 				bin="May";      break;
 			case 6:
 				bin="June";     break;
 			case 7:
 				bin="July";     break;
 			case 8:
 				bin="August";   break;
 			case 9:
 				bin="September";break;
 			case 10:
 				bin="October";  break;
 			case 11:
 				bin="November"; break;
 			case 12:
 				bin="December"; break;
 			}
 		
c_week = use(c_year, c_month);     // 调用函数use,得到星期几 
rr=c_week;
Resetday(c_week, c_year, c_month); // 调用Resetday 函数

} 
} 


//获取系统当前的月份,并将其转换成英文
public String getMonthEnglish(int monthnum)
{
	String bin="";
		switch(monthnum+1)      //mouthnum是从0开始的
 		{	
 			case 1:
 				bin="January";   break;
 			case 2:
 				bin="February";  break;
 			case 3:
 				bin="March";     break;
 			case 4:
 				bin="April";     break;
 			case 5:
 				bin="May";       break;
 			case 6:
 				bin="June";      break;
 			case 7:
 				bin="July";      break;
 			case 8:
 				bin="August";    break;
 			case 9:
 				bin="September"; break;
 			case 10:
 				bin="October";   break;
 			case 11:
 				bin="November";  break;
 			case 12:
 				bin="December";  break;
 			}
 			return bin;
}


//对面板中的49个LABEL进行设置
public void Init() { 
int year, month_num, first_day_num,nowYear;        
String log[] = { "SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT" }; 
for (int i = 0; i < 7; i++) { 
label[i].setText(log[i]);            //将标签的第一行分别设置从“SUN”到“SAT”7个Label
} 
for (int i = 0; i < 49; i = i + 7) { 
label[i].setForeground(Color.red);   // 将星期日的日期设置为红色 
} 
for (int i = 6; i < 49; i = i + 7) { 
label[i].setForeground(Color.green); // 将星期六的日期设置为绿色 
} 
for (int i = 1; i<2040; i++) {       // 将年份的下拉选项设置从1到2039年之间 
com1.addItem("" + i);                //将整数转化成字符串
} 
for (int i = 1; i < 13; i++) {       //将月份的下拉选项设置从1到12月之间
com2.addItem("" + i);                //将整数转化成字符串
} 

month_num = (int) (now.get(Calendar.MONTH)); // 得到当前时间的月份 
year      = (int) (now.get(Calendar.YEAR));  // 得到当前时间的年份 
com1.setSelectedIndex(year-1);               // 设置下拉列表显示为当前年 
com2.setSelectedIndex(month_num);            // 设置下拉列表显示为当前月 
first_day_num = use(year, month_num); 
Resetday(first_day_num, year, month_num); 


//将BAOCUN(保存)按钮作为事件监听
 Baocun.addActionListener(new 
 	java.awt.event.ActionListener(){
 		public void actionPerformed(ActionEvent e){
 			Baocun_actionPerformed(e);
 		}
 	});
 	Baocun.setEnabled(true);


} 

public int use(int reyear, int remonth) { 
int week_num; 
now.set(reyear, remonth, 1);   // 设置时间为所要查询的年月的第一天 
week_num = (int) (now.get(Calendar.DAY_OF_WEEK));  // 得到第一天的星期 
return week_num;            
} 

//Resetday函数
@SuppressWarnings("deprecation") 
public void Resetday(int week_log, int year_log, int month_log) { 
int month_day_score; // 存储月份的天数 
int count;           //初始化
month_day_score = 0; 
count = 1; 
int month; 
long sum; 

Date date = new Date(year_log, month_log + 1, 1); // now 
GregorianCalendar   cal   =   new   GregorianCalendar(); 
cal.setTime(date); 


//判断是几月份,根据它来输入day的值 
if( month_log==0 || month_log==2 || month_log==4 || month_log==6 || month_log==7 || month_log==9 || month_log==11) 
{ 
month_day_score = 31;  //一年的1,3,5,7,8,10,12为大月,31天
} 
else if(month_log==3 || month_log==5 || month_log==8 || month_log==10) 
{ 
month_day_score=30;   //一年的4,6,9,11为小月,共30天
} 
else 
{ 
if(cal.isLeapYear(year_log))   //判断是否为软件
{ 
month_day_score=29;        //闰年为29天
} 
else 
{ 
month_day_score=28;      //否则,一月的天数为28
} 
} 
for (int i = 7; i < 49; i++) {  // 初始化标签 
label[i].setText(""); 
} 

for(int i=0;i<49;i++)      
{
	s[i]="";           //将标签中赋空值
}

//week_log是星期几, month_day_score是这个月的总天数
week_log = week_log+6;      // 将星期数加6,使显示正确     
month_day_score = month_day_score+week_log; 
for (int i = week_log; i < month_day_score; i++, count++) { 
label[i].setFont(font); 
label[i].setText(count+""); s[i+1]=count+"";
} 
} 


//获取系统时间
void Baocun_actionPerformed(ActionEvent e){
		Calendar ca1    =     Calendar.getInstance();
    	int   yearnow   =     ca1.get(Calendar.YEAR);           //年
        int   monthnow  =     ca1.get(Calendar.MONTH)+1;        //月(月是从0开始的,所以要加1)
        int   daynow    =     ca1.get(Calendar.DATE);           //天
        int   hournow   =     ca1.get(Calendar.HOUR_OF_DAY);    //时
        int   minutenow   =   ca1.get(Calendar.MINUTE);         //分
        int   secondnow   =   ca1.get(Calendar.SECOND);         //秒
        int   weeknow     =   ca1.get(Calendar.WEDNESDAY);      //当前周
	
	// 抓取捕获异常
	try                                                   
     { 
    FileWriter fw = new FileWriter("E:\\M05003333.txt");    
        File file = new File("E:\\M05003333.txt");          
    //将文档清空
     new FileOutputStream(file,false);
     	     
    fw.flush();    //强制将输出流缓冲区的数据送出~~
    fw.close();    //关闭流
    FileOutputStream os = new FileOutputStream(file); 
    DataOutputStream out = new DataOutputStream(os); 

       out.writeBytes("                    calendar");
       out.writeBytes("\r\n");
       out.writeBytes("                     "+ bin);
       out.writeBytes("\r\n");
   	   out.writeBytes("_______________________________________________");
   	   out.writeBytes("\r\n");
   	   for(int i = 0 ; i < 7 ; i++)    
       {
            out.writeBytes("   "+ label[i].getText());//输出LABEL前7个,即SUN,MON到SAT。并每个之间空4格
        	
       }
       	out.writeBytes("\r");           
       	for(int i = 7; i < 49 ; i++)
   		{
   		
   			int len = s[i].length();
      		if (s[i].equals(""))      // 如果是标签中是空值,则输出6个空格
   			{
   				out.writeBytes("      ");
       		}
        		
   			else if (len == 1)       //如果标签中是一位数,则输出4个空格加其值再加一个空格
     		{
   				out.writeBytes("    "+s[i]+" ");
   			}
   			else if(len == 2)        //如果是标签中是两位数字的话,则输出三个空格加上其值再加上一个空格
     		{
     			out.writeBytes("   "+s[i]+" ");
        	}			
       		if(i % 7 ==  0)               //每到周六就换行回车
    		{
       			out.writeBytes("\r\n");
     		}
     		}
     		out.writeBytes("\r\n");   //换行回车
     		
     		//弹出对话框
     		JOptionPane.showMessageDialog(this,"     您已经导出到E盘!","恭喜您成功了",JOptionPane.WARNING_MESSAGE); 
        	out.writeBytes("\r\n");
        	 
        
                
               //输出格式
                out.writeUTF(" 今天是:" + yearnow + "年" + monthnow + "月" + daynow +
                            "日,星期" +
                            getChineseDayOfWeek(ca1.get(ca1.DAY_OF_WEEK)));
                out.writeBytes("\r\n");
                out.writeUTF(" 当前时间是:" + hournow + "时" + minutenow + "分" +
                            secondnow + "秒");
                         
              	out.close();
		
			 }   
	catch(Exception e1){                                //例外事件处理
       	     System.out.println("Error:"+e1);	
       	     }		
	
	
	
	
}
    //将阿拉伯数字转化成大写中文字母

  public static String getChineseDayOfWeek(int dayOfWeek) {
        switch (dayOfWeek) {
        case java.util.Calendar.MONDAY:
            return "一";
        case java.util.Calendar.TUESDAY:
            return "二";
        case java.util.Calendar.WEDNESDAY:
            return "三";
        case java.util.Calendar.THURSDAY:
            return "四";
        case java.util.Calendar.FRIDAY:
            return "五";
        case java.util.Calendar.SATURDAY:
            return "六";
        case java.util.Calendar.SUNDAY:
            return "日";
        }
        return "";
    }

public static void main(String[] args)   {   //主函数
new CALENDAR(); 
}    

} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -