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

📄 mycalendar.java

📁 使用eclipse编写的日历程序
💻 JAVA
字号:
package mine;


import java.awt.*;
import java.awt.event.*;
import java.util.Calendar;
import java.util.GregorianCalendar;
import javax.swing.*;
import javax.swing.event.*;
public class MyCalendar extends JFrame
{
	JComboBox months=new JComboBox();				//改变月份的下拉菜单
	JSpinner years=new JSpinner();					//改变年份的选择栏
	JTextField[]  dates=new JTextField[49];			//显示月历的文本框数组
	JLabel jmonth;									//提示月份标签
	JLabel jyear;									//提示年份标签
	GregorianCalendar cal=new GregorianCalendar(); //用于获取时间的Java GregorianCalendar类对象
	int today_Month=cal.get(Calendar.MONTH);       //获取的当前月份
	int today_Year=cal.get(Calendar.YEAR);         //获取的当前年份
	
	public MyCalendar()			//构造方法,设计万年历面板
	{
		super("Calendar");
		Container contentPane=getContentPane();		//面板设计的层次是由大到小,由里及表,在构造方法中依次进行定义、创建、添加、设置的操作,这样代码的可读性可以提高,也方便日后的修改
		contentPane.setLayout(new BorderLayout());
		JPanel layMonYear=new JPanel();
		JPanel layDates=new JPanel();
		layDates.setBorder(BorderFactory.createLoweredBevelBorder());//创建一个具有凹入斜面边缘的边框,将组件当前背景色的较亮的色度用于突出显示,较暗的色度用于阴影
		contentPane.add(layMonYear,BorderLayout.NORTH);
		contentPane.add(layDates,BorderLayout.CENTER);
		setSize(300,300);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setVisible(true);
		setResizable(false);
		
		years=new JSpinner(new SpinnerNumberModel(today_Year,today_Year-100,today_Year+100,1));//创建JSpinner
		years.setEditor(new JSpinner.NumberEditor(years, "#"));//设置Spinner的界面类型
		jyear=new JLabel("YEAR",JLabel.CENTER);
		jmonth=new JLabel("MONTH",JLabel.CENTER);
		layMonYear.add(jmonth);							//添加进面板
		layMonYear.add(months);
		layMonYear.add(jyear);
		layMonYear.add(years);
		layDates.setLayout(new GridLayout(7,7));
		for(int n=0;n<49;n++)							//利用数组设置TextField,简单而快捷,一举多得
		{
			dates[n]=new JTextField();
			dates[n].setEnabled(false);
			dates[n].setHorizontalAlignment(JTextField.CENTER);
			dates[n].setDisabledTextColor(Color.BLACK);
			layDates.add(dates[n]);
		}
		for(int n=1;n<=12;n++)
			months.addItem(n);

		months.addActionListener(new Processor(this));	//监听器位置保证程序刚运行时有初值
		years.addChangeListener(new Processor(this));
		months.setSelectedIndex(today_Month);
		
		for(int n=0;n<7;n++)
		{
			dates[n].setBackground(Color.BLUE);
			dates[n].setDisabledTextColor(Color.white);
		}
		dates[0].setText("日");
		dates[1].setText("一");
		dates[2].setText("二");
		dates[3].setText("三");
		dates[4].setText("四");
		dates[5].setText("五");
		dates[6].setText("六");		
		
		//pack();	
	}
	class Processor implements ActionListener,ChangeListener	//监听ComboBox和JSpinner,并作相应事件响应
	{
		MyCalendar mine;				//事件响应的万年历对象
		int firstDayOfWeek;				//一个月中的第一天在第一周中的位置
		int year,month,sumDayOfMonth;	//当前年、月和一个月的天数
		public Processor(MyCalendar mine)			//构造函数,获取响应的万年历对象
		{
			this.mine=mine;				
		}
		public void actionPerformed(ActionEvent e) //用于响应ComboBox的事件
		{
			setDates();
		}
		public void stateChanged(ChangeEvent e) //用于响应JSpinner的事件
		{
			setDates();
		}
		public void setDates()			////用于更改JTestField数组的值
		{
			for(int i=7;i<49;i++)	   	//每次改变年或月,都应将dates重置为空,否则会出现数据重叠		
			{
				mine.dates[i].setText("");
				
			}		
			year=Integer.parseInt(mine.years.getValue().toString());	//获取JSpinner当前值所对应的年份
			month=mine.months.getSelectedIndex();						//获取所选当前JComboBox中index所对应月份
			sumDayOfMonth=31;
			mine.cal.set(year, month, 1);
			firstDayOfWeek=mine.cal.get(Calendar.DAY_OF_WEEK);			//计算出该年该月所对应的第一天是星期几firstDayOfWeek(即在一星期中的位置)
			if(month==0||month==2||month==4||month==6||month==7|month==9||month==11)//根据月份,利用if—else语句设置该月总天数sumDayOfMonth
			{
				sumDayOfMonth=31;
			}
			else if(month==3||month==5||month==8||month==10)
			{
				sumDayOfMonth=30;
			}
			else if(month==1)
			{
				if(mine.cal.isLeapYear(year))							//通过年份,判断是否为闰年,设置2月份天数
				{
					sumDayOfMonth=29;
				}
				else sumDayOfMonth=28;
			}
			firstDayOfWeek+=6;
			for(int i=firstDayOfWeek;i<sumDayOfMonth+firstDayOfWeek;i++)//从第一天开始到该年该月最后一天,利用循环设置相应位置文本框显示文本,以完成该年该月月历
			{
				mine.dates[i].setText((i-firstDayOfWeek+1)+"");
			}		
		}
	}	
	public static void main(String args[])////创建一个万年历以做测试
	{
		MyCalendar myCalendar=new MyCalendar();
		myCalendar.setVisible(true);
	}
}

⌨️ 快捷键说明

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