万年历-Java课程设计题(eclipse编辑器)

Posted gamedev˚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了万年历-Java课程设计题(eclipse编辑器)相关的知识,希望对你有一定的参考价值。



项目目录结构:


`CalendarMainClass.java`

package Calendar;

/**
 * CalendarMainClass主类
 * @author Administrator
 * @version 版本1.0
 */
public class CalendarMainClass 								

	/**
	 * 主函数
	 * @param args 传入的参数 args
	 */
	public static void main(String[] args) 
		/**
		 * 创建一个基于CalendarFrame的主容器fram
		 */
		CalendarFrame frame=new CalendarFrame();		
		/**
		 * 设置主容器的显示位置,以及界面的高和宽数据
		 */
		frame.setBounds(200,150,670,490);	
		/**
		 * 设置主容器为可见
		 */
		frame.setVisible(true);		
		/**
		 * 主容器初始化年月信息
		 */
		frame.setYearAndMonth(2016,1);							
		/**
		 * 设置主容器的标题
		 */
		frame.setTitle("万年历");		
		
	
	


`CalendarFrame.java`

package Calendar;
import java.util.*;
import java.awt.*;
import java.awt.event.*;
import java.text.SimpleDateFormat;

import javax.swing.*;
import javax.swing.border.*;
/**
 * 
 * 窗体的具体构造及执行代码 
 * @author Administrator
 * @version 版本1.0
 */
public class CalendarFrame extends JFrame implements ActionListener,ItemListener
	private static final long serialVersionUID = 1L;
	/**
	 * labelDay[] 存放每一天的标签数组|
	 * titleName 显示标题栏名称的按钮|
	 * text 输入年份的文本框|
	 * button,button1 按钮组件|
	 * label 标签|
	 * comBox 下拉列表组件|
	 * showMessage 显示日历的标签项
	 * 
	 */
	JLabel labelDay[]=new JLabel[42];										
	JButton titleName[]=new JButton[7];										
	JTextField text;														
	JButton button,button1;													
	JLabel label1,label2;																		
	JComboBox<String> comBox;														
	String name[]="日","一","二","三","四","五","六";							
	CalendarBean calendar;													
	JLabel showMessage=new JLabel("",JLabel.CENTER);						

	int year=2011,month=2;
	/**
	 * JFrame都是Windows类的子类,因此主窗口为Windows型容器,其默认布局为BorderLayout布局
	 */
	public CalendarFrame()	
		/**
		 * 为窗体修改自定义图标
		 */
		Image icon=Toolkit.getDefaultToolkit().getImage("F:\\\\eclipse\\\\代码区\\\\Calendar\\\\src\\\\Calendar\\\\calendar1.png");
		setIconImage(icon);
		/**
		 * 创建面板(可向面板中添加组件,再将面板添加到其他容器中)
		 */
		JPanel pCenter=new JPanel();		
		/**
		 * 将pCenter的布局设置为7行7列的GridLayout布局
		 */
		pCenter.setLayout(new GridLayout(7,7));	
		pCenter.setBackground(Color.WHITE);
		/**
		 * 向主容器中添加星期栏
		 */
		for(int i=0;i<7;i++)												
			titleName[i]=new JButton(name[i]);								
			titleName[i].setBorder(new SoftBevelBorder(BevelBorder.RAISED));	
			//titleName[i].setBackground(Color.green);
			pCenter.add(titleName[i]);										
																			
		/**
		 * 向主容器添加每个小日期标签
		 */
		for(int i=0;i<42;i++)												
			labelDay[i]=new JLabel("",JLabel.CENTER);
			labelDay[i].setBorder(new SoftBevelBorder(BevelBorder.LOWERED));	
			pCenter.add(labelDay[i]);										
						  
		/**
		 * 声明calendar为calendarBean类的子类
		 */																	
		calendar=new CalendarBean();	
		/**
		 * 设置个组件的具体内容
		 * 
		 */																	
		text=new JTextField(3);	
		text.setText("2016");
		button=new JButton("转到");									
		button1=new JButton("当前日期");										
		label1=new JLabel("                          万年历           ");
		/**
		 * 设置label标签的字体大小为30px
		 */																	
		label1.setFont(new Font("",1,30));	
		/**
		 * 创建下拉列表,并添加下拉列表选项
		 */			
		label2=new JLabel("今日:");
		comBox=new JComboBox<String>();																							
		String []a="1","2","3","4","5","6","7","8","9","10","11","12";
		for(int i=0;i<a.length;i++)											
		comBox.addItem(a[i]);		
		/**
		 * 向组件添加响应事件
		 */																	
		button.addActionListener(this);									
		button1.addActionListener(this);									
		comBox.addItemListener(null);	
		/**
		 * 创建pNorth,pSouth面板
		 */																	
		JPanel pNorth=new JPanel();	
		pNorth.setBackground(Color.cyan);
		JPanel pSouth=new JPanel();		
		/**
		 * 向面板中添加各个组件
		 */																	
		pNorth.add(label1);		
		pNorth.add(label2);
		pSouth.add(button1);																																	
		pSouth.add(text);
		pSouth.add(new JLabel("年"));					
		pSouth.add(comBox);	
		pSouth.add(new JLabel("月"));																						
		pSouth.add(button);													
		pSouth.add(showMessage);		
		/**
		 * 将三个面板添加到以BorderLayout为布局的主Windows型容器中
		 */																	
		add(pCenter,BorderLayout.CENTER);									
		add(pNorth,BorderLayout.NORTH);										
		add(pSouth,BorderLayout.SOUTH);		
		/**
		 * 向setYearAndMonth方法传入year,month的值
		 */																	
		setYearAndMonth(year,month);
		/**
		 * 设置,当点击窗体右上角的关闭图标时,程序会做出直接结束程序的处理
		 */																	
		setDefaultCloseOperation(DISPOSE_ON_CLOSE);							
	
	/**
	 * ------编写传入年月的方法setYearAndMonth------
	 * @param y 年份
	 * @param m 月份
	 */
	public void setYearAndMonth(int y,int m)								
		calendar.setYear(y);
		/**
		 * 将setYearAndMonth方法得到的year,month的值传给calendar类
		 */																	
		calendar.setMonth(m);		
		/**
		 * 获取calendar类中getCalendar方法中的日期字符串数组,将获取的字符串数组的值传给每个labelDay小日期标签
		 */	
		String day[]=calendar.getCalendar();
		for(int i=0;i<42;i++)												
			labelDay[i].setText(day[i]);	
		/**
		 * 在showMessage标签中显示输出日期
		 */	
		showMessage.setText("日历:"+calendar.getYear()+"年"+calendar.getMonth()+"月");
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm");
		label2.setText("今日:"+df.format(new Date()));
		/**
		 * 设置标签输出的字体颜色为蓝色
		 */	
		showMessage.setForeground(Color.BLUE);								
																			
	/**
	 * ---------重写actionPerformed方法---------
	 */	
	public void actionPerformed(ActionEvent e)								
		/**
		 * reg为正则表达式,表示纯数字的字符串(不含其他任何与数字无关的字符)
		 */
		String reg="^[\\\\d]*$";
		/**
		 * 判断响应事件触发的是button组件
		 */
		if(e.getSource()==button)											
			/**
			 * 这个地方如何让程序识别并弹出对话框,而不是在未输入时直接判别程序出错
			 */	
			if(text.getText().isEmpty())				
				
				JOptionPane.showMessageDialog(this, "您未输入年份", "消息对话框", JOptionPane.WARNING_MESSAGE);
				/**
				 * 将屏幕焦点聚在text组件上
				 */
				text.requestFocus(true);
			
			/**
			 * 判断text文本框中是否为纯数字,若不是则弹出对话框 "您输入了非法字符"
			 */
			else if(!(text.getText()).matches(reg))
			JOptionPane.showMessageDialog(this, "您输入了非法字符", "消息对话框", JOptionPane.WARNING_MESSAGE);
			
			/**
			 * 判断text文本框中是否为纯数字,若是,则输出相应年份
			 */
			else 
			
				/**
				 * 将文本框中得到的字符串强制转为整型值,并赋值给整型变量i
				 */	
			Integer i=Integer.parseInt(text.getText());	
			/**
			 * 将整型i变量中的值传递给calendar类中,并设置为year值
			 */
			calendar.setYear(i);
			
			
		
			/**
			 * 判断用户是否使用了下拉列表框,若未使用,则弹出消息对话框 "您未选择月份"
			 */
			if(((String)comBox.getSelectedItem()).equals("选择月份"))				
				JOptionPane.showMessageDialog(this, "您未选择月份", "消息对话框", JOptionPane.WARNING_MESSAGE);
				/**
				 * 将屏幕焦点聚在comBox组件上
				 */
				comBox.requestFocus(true);
			
			else
			/**
			 * 将下拉列表框中选中的字符串值强制转换为整型,并赋值给整型变量j
			 */	
			Integer j=Integer.parseInt(comBox.getSelectedItem().toString());
			/**
			 * 将整型i变量中的值传递给calendar类中,并设置为month值
			 */	
			calendar.setMonth(j);											
			/**
			 * 获取calendar类中getCalendar方法中的日期字符串数组
			 */	
			String day[]=calendar.getCalendar();							
			/**
			 * 将获取的字符串数组的值传给每个labelDay小日期标签
			 */	
			for(int n=0;n<42;n++)
				labelDay[n].setText(day[n]);									
			
			
			/**
			 * 在showMessage标签中显示输出日期
			 */	
			showMessage.setText("日历:"+calendar.getYear()+"年"+calendar.getMonth()+"月");
		
		/**
		 * 判断响应时间触发的是button1组件
		 */	
		else if(e.getSource()==button1)		
			/**
			 * --------------获取系统当前日期--------------
			 */	
			Calendar c=Calendar.getInstance();								
			int y=c.get(Calendar.YEAR);										
			int m=c.get(Calendar.MONTH)+1;
			calendar.setMonth(m);
			String day[]=calendar.getCalendar();							
			for(int n=0;n<42;n++)
				labelDay[n].setText(day[n]);									
			
			showMessage.setText("日历:"+y+"年"+m+"月");	
			text.setText("");
																			
		/**
		 * 设置showMessage标签的字体颜色为蓝色
		 */	
		showMessage.setForeground(Color.BLUE);								
	
	/**
	 * ---------重写itemStateChanged方法--------
	 * 下拉列表的响应事件具体已经在actionPerformed方法内实现
	 */	
	public void itemStateChanged(ItemEvent arg0) 							
		// TODO Auto-generated method stub									
																			


`CalendarBean.java`

package Calendar;
import java.util.Calendar;
/**
 * 生成日历字符串数组
 * @author Administrator
 * @version 版本1.0
 */
public class CalendarBean 
	String day[];
	int year=2005,month=0;
	/**
	 * 设置year的set和get方法
	 * @param year 年份
	 * 
	 */
	public void setYear(int year)									
		this.year=year;												
																	
	public int getYear()											
		return year;												
						
	/**
	 * 设置month的set和get方法
	 * @param month 月份
	 */
	public void setMonth(int month)								
		this.month=month;											
																	
	public int getMonth()											
		return month;
																	
	
	/**
	 * 创建可以得到具体日期的字符串数组
	 * @return 返回具体日期的字符串数组
	 */
	public String[] getCalendar()									
		String a[]=new String[42];
		Calendar 日历=Calendar.getInstance();
		日历.set(year, month-1, 1);
		int 星期几=日历.get(Calendar.DAY_OF_WEEK)-1;
		int day=0;
		if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
			day=31;
		if(month==4||month==6||month==9||month==11)
			day=30;
		if(month==2)
			if(((year%4==0)&&(year%100!=0))||(year%400==0))
				day=29;
			else
				day=28;
		
		for(int i=星期几,n=1;i<星期几+day;i++)
			a[i]=String.valueOf(n);
			n++;
		
		return a;
	



以上是关于万年历-Java课程设计题(eclipse编辑器)的主要内容,如果未能解决你的问题,请参考以下文章

Java课程设计---Eclipse基本环境配置

用java软件里的eclipse编ATM取款机(课程设计)

java课程设计-文本编辑器

Java面试2021,java文本编辑器课程设计

Java工程师面试题及答案,通讯录管理系统java课程设计

Eclipse 无法识别 Java 项目;类路径问题