小日历JAVA课程设计实验报告.docx
- 文档编号:29799195
- 上传时间:2023-07-27
- 格式:DOCX
- 页数:22
- 大小:45.90KB
小日历JAVA课程设计实验报告.docx
《小日历JAVA课程设计实验报告.docx》由会员分享,可在线阅读,更多相关《小日历JAVA课程设计实验报告.docx(22页珍藏版)》请在冰豆网上搜索。
小日历JAVA课程设计实验报告
软件学院
课程设计报告书
课程名称
设计题目
专业班级
学号
姓名
指导教师
年月
目录
JAVA日历设计2
1.设计目标2
2.设计要求2
3.制作要点:
2
4.设计思想2
5.设计类及对象设计3
6.代码分析3
6.程序源代码9
7.调试记录14
8.总结15
9.参考文献16
JAVA日历设计
1.设计目标
本课程设计实现一个日历的功能,可显示当前的年,月,日和星期.也可以查询,选择年,月后,显示当时的日历.
2.设计要求
(1)界面是日历。
该日历可以按年前后翻动,当鼠标单击“上一年”按钮时,当前日历的年份将减一;当鼠标左键单击“下年”按钮,当前日历的年份将加一。
(2)也可以在某年内按月前后翻动。
当鼠标左键单击“上月”按钮时,当前日历的月份将减一;当鼠标左键单击“下月”当前日历表的月份将加一。
(3)使用鼠标左键在要选择的日期上单击,变颜色.
3.制作要点:
(1).AWT与Swing的使用.
(2)应用JApplet生成界面.
4.设计思想
(1)本小日历设计主体结构为:
设计一个框架MainFrame,然后在MainFrame里添加一个MainPanel面板。
定义一个MainPanel面板类,该面板以边布局格式,所有其他面板、标签等均添加到该面板中。
(2)MainPanel面板北部(上方),添加一个年月面板YearMonthPanel。
该年月面板主要放年份显示、月份显示、标题显示。
YearMonthPanel面板也使用边布局格式,西部添加一个年份面板,放年份信息;中部添加一个TextPanel面板,放标题文本显示信息;东部添加一个月份面板MonthPanel,放月份下拉框信息。
(3)MainPanel主面板的中部,添加一个DaysPanel面板用于放置月份的天数表格信息。
(4)MainPanel主面板的南部(下方),添加一个InfoPanel面板,主要用于放置显示个人信息。
(5)InfoPanel面板上设计添加一个超级链接标签,链接到个人博客。
5.设计类及对象设计
在本程序中:
定义了一个Frame类,主要定义一个窗体框架,用于显示日历信息,并在主函数中只创建一个该窗体对象实现程序功能。
定义了一个主日历面板类MyCalendar,其中包含了日历设计所用到的全局变量、功能函数等,在Frame类里定义了其对象。
在该日历面板类里又设计了一个内部类CalendarTable表格类,用于布局日历天的显示格式。
为了设计一个超级链接,定义了一个LinkLable类,单独保存在一个文件LinkTbale.java中,在日历面板类MyCalendar里定义了其对象。
6.代码分析
定义星期天到星期六全局变量
publicstaticfinalStringWEEK_SUN="星期日";//星期标签名称
publicstaticfinalStringWEEK_MON="星期一";
publicstaticfinalStringWEEK_TUE="星期二";
publicstaticfinalStringWEEK_WED="星期三";
publicstaticfinalStringWEEK_THU="星期四";
publicstaticfinalStringWEEK_FRI="星期五";
publicstaticfinalStringWEEK_SAT="星期六";
publicstaticfinalColorbackground=Color.white;//设置背景颜色
publicstaticfinalColorforeground=Color.black;//设置前景颜色
publicstaticfinalColorheaderBackground=Color.blue;//设置题头星期的背景颜色
publicstaticfinalColorheaderForeground=Color.white;//设置题头星期的前景颜色
publicstaticfinalColorselectedBackground=Color.green;//设置被选中的日期的背景颜色
publicstaticfinalColorselectedForeground=Color.white;//设置被选中的日期的前景颜色
privateJPanelcPane;//日历面板
privateJLabelyearsLabel;//"年份"标签
privateJSpinneryearsSpinner;//年调控,年份组合框
privateJLabelmonthsLabel;//"月份"标签
privateJComboBoxmonthsComboBox;//12月下拉框
privateJTabledaysTable;//用来显示日期的table,日表格
privateAbstractTableModeldaysModel;//天单元表格
privateCalendarcalendar;//日历对象
函数定义
publicMyCalendar(){//构造函数
cPane=(JPanel)getContentPane();
}
publicvoidinit(){//初始化,对所有的空间进行布局,面板界面函数
cPane.setLayout(newBorderLayout());
//使用border布局管理器
calendar=Calendar.getInstance();//默认方式,以本地的时区和地区来构造Calendar
yearsLabel=newJLabel("年份:
");//设置年份标签显示
yearsSpinner=newJSpinner();//构造年份spinner组合框
yearsSpinner.setEditor(newJSpinner.NumberEditor(yearsSpinner,"0000"));
yearsSpinner.setValue(newInteger(calendar.get(Calendar.YEAR)));
//增加监听监听年份的改变
yearsSpinner.addChangeListener(newChangeListener(){//注册该组合框的事件监听器
publicvoidstateChanged(ChangeEventchangeEvent){
intday=calendar.get(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH,1);
calendar.set(Calendar.YEAR,((Integer)yearsSpinner.getValue()).intValue());
intmaxDay=calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH,day>maxDay?
maxDay:
day);
updateView();//更新显示
}
});
JPanelyearMonthPanel=newJPanel();//定义年月面板
cPane.add(yearMonthPanel,BorderLayout.NORTH);//添加年月面板到日历面板的南面(最上方)
yearMonthPanel.setLayout(newBorderLayout());//边布局模式
yearMonthPanel.add(newJPanel(),BorderLayout.CENTER);
JPanelyearPanel=newJPanel();//构建年份面板
yearMonthPanel.add(yearPanel,BorderLayout.WEST);//年份面板添加到年月面板西部(左边)
yearPanel.setLayout(newBorderLayout());//设置年份面板为边布局并添加年份标签和组合框
yearPanel.add(yearsLabel,BorderLayout.WEST);
yearPanel.add(yearsSpinner,BorderLayout.CENTER);
monthsLabel=newJLabel("月份:
");//设置月份标签显示
monthsComboBox=newJComboBox();//向月份下拉框中增加内容
for(inti=1;i<=12;i++){//构造下拉框的12个月份
monthsComboBox.addItem(newInteger(i));
}
monthsComboBox.setSelectedIndex(calendar.get(Calendar.MONTH));//下拉框当前月份为选中状态
monthsComboBox.addActionListener(newActionListener(){//注册月份下拉框的事件监听器
publicvoidactionPerformed(ActionEventactionEvent){
intday=calendar.get(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH,1);
calendar.set(Calendar.MONTH,monthsComboBox.getSelectedIndex());
intmaxDay=calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
calendar.set(Calendar.DAY_OF_MONTH,day>maxDay?
maxDay:
day);
updateView();//更新面板显示
}
});
JPanelmonthPanel=newJPanel();//定义月份面板
yearMonthPanel.add(monthPanel,BorderLayout.EAST);//添加月份面板到年月面板的东面(右面)
monthPanel.setLayout(newBorderLayout());//月份面板设为边布局方式
monthPanel.add(monthsLabel,BorderLayout.WEST);//添加月份名称标签到月份面板西面(左面)
monthPanel.add(monthsComboBox,BorderLayout.CENTER);//添加月份下拉框到月份面板中间
daysModel=newAbstractTableModel(){//设置7行7列
publicintgetRowCount(){//设置7行
return7;
}
publicintgetColumnCount(){//设置列7
return7;
}
publicObjectgetValueAt(introw,intcolumn){
if(row==0){//第一行显示星期
returngetHeader(column);
}
row--;
Calendarcalendar=(Calendar)MyCalendar.this.calendar.clone();
calendar.set(Calendar.DAY_OF_MONTH,1);
intdayCount=calendar.getActualMaximum(Calendar.DAY_OF_MONTH);
intmoreDayCount=calendar.get(Calendar.DAY_OF_WEEK)-1;
intindex=row*7+column;
intdayIndex=index-moreDayCount+1;
if(index
returnnull;
}else{
returnnewInteger(dayIndex);
}
}
};
daysTable=newCalendarTable(daysModel,calendar);//构造日表格
//设置每个call可以被选中
daysTable.setCellSelectionEnabled(true);//设置表格单元格可选择
daysTable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
daysTable.setDefaultRenderer(daysTable.getColumnClass(0),newTableCellRenderer(){
publicComponentgetTableCellRendererComponent(JTabletable,Objectvalue,booleanisSelected,
booleanhasFocus,introw,intcolumn){
Stringtext=(value==null)?
"":
value.toString();
JLabelcell=newJLabel(text);
cell.setOpaque(true);//绘制边界内的所有像素
if(row==0){//第一行显示星期,设置为星期的前景色和背景色
cell.setForeground(headerForeground);
cell.setBackground(headerBackground);
}else{
if(isSelected){//日期单元格如果选中,则设置为日期选中的前、背景色
cell.setForeground(selectedForeground);
cell.setBackground(selectedBackground);
}else{//设置日期单元格的普通前、背景色
cell.setForeground(foreground);
cell.setBackground(background);
}
}
returncell;
}
});
updateView();
cPane.add(daysTable,BorderLayout.CENTER);//添加日面板到日历面板中间
}
publicstaticStringgetHeader(intindex){//设置第一行星期的显示
switch(index){
case0:
returnWEEK_SUN;
case1:
returnWEEK_MON;
case2:
returnWEEK_TUE;
case3:
returnWEEK_WED;
case4:
returnWEEK_THU;
case5:
returnWEEK_FRI;
case6:
returnWEEK_SAT;
default:
returnnull;
}
}
publicvoidupdateView(){//更新面板显示方法
daysModel.fireTableDataChanged();
daysTable.setRowSelectionInterval(calendar.get(Calendar.WEEK_OF_MONTH),
calendar.get(Calendar.WEEK_OF_MONTH));
daysTable.setColumnSelectionInterval(calendar.get(Calendar.DAY_OF_WEEK)-1,
calendar.get(Calendar.DAY_OF_WEEK)-1);
}
设置日历的table
publicstaticclassCalendarTableextendsJTable{//表格类
privateCalendarcalendar;
publicCalendarTable(TableModelmodel,Calendarcalendar){//构造方法
super(model);
this.calendar=calendar;
}
publicvoidchangeSelection(introw,intcolumn,booleantoggle,booleanextend){//选择表格单元格时
super.changeSelection(row,column,toggle,extend);
if(row==0){//选择为第一行(星期)时不改变单元格
return;
}
Objectobj=getValueAt(row,column);
if(obj!
=null){
calendar.set(Calendar.DAY_OF_MONTH,((Integer)obj).intValue());
}
}
}
让applet作为一个可执行的程序来运行
publicstaticvoidmain(String[]args){
JFrameframe=newJFrame("日历");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
MyCalendarmyCalendar=newMyCalendar();
myCalendar.init();
frame.getContentPane().add(myCalendar);
frame.setSize(400,250);
frame.show();
}
}
6.程序源代码
importjava.awt.*;
importjava.awt.event.*;
importjava.util.*;
importjavax.swing.*;
importjavax.swing.event.*;
importjavax.swing.table.*;
publicclassMyCalendarextendsJApplet{
//定义星期天到星期六全局变量
publicstaticfinalStringWEEK_SUN="星期日";//星期标签名称
publicstaticfinalStringWEEK_MON="星期一";
publicstaticfinalStringWEEK_TUE="星期二";
publicstaticfinalStringWEEK_WED="星期三";
publicstaticfinalStringWEEK_THU="星期四";
publicstaticfinalStringWEEK_FRI="星期五";
publicstaticfinalStringWEEK_SAT="星期六";
publicstaticfinalColorbackground=Color.white;//设置背景颜色
publicstaticfinalColorforeground=Color.black;//设置前景颜色
publicstaticfinalColorheaderBackground=Color.blue;//设置题头星期的背景颜色
publicstaticfinalColorheaderForeground=Color.white;//设置题头星期的前景颜色
publicstaticfinalColorselectedBackground=Color.green;//设置被选中的日期的背景颜色
publicstaticfinalColorselectedForeground=Color.white;//设置被选中的日期的前景颜色
privateJPanelcPane;//日历面板
privateJLabelyearsLabel;//"年份"标签
privateJSpinneryearsSpinner;//年调控,年份组合框
privateJLabelmonthsLabel;//"月份"标签
privateJComboBoxmonthsComboBox;//12月下拉框
privateJTabledaysTable;//用来显示日期的table,日表格
privateAbstractTableModeldaysModel;//天单元表格
privateCalendarcalendar;//日历对象
//函数定义
publicMyCalendar(){//构造函数
cPane=(JPanel)getContentPane();
}
publicvoidinit(){//初始化,对所有的空间进行布局,面板界面函数
cPane.setLayout(newBorderLayout());
//使用border布局管理器
calendar=Calendar.getInstance();//默认方式,以本地的时区和地区来构造Calendar
yearsLabel=newJLabel("年份:
");//设置年份标签显示
yearsSpinner=newJSpinner();//构造年份spinner组合框
yearsSpinner.setEditor(newJSpinner.NumberEditor(yearsSpinner,"0000"));
yearsSpinner.setValue(newInteger(calendar.get(Calendar.YEAR)));
//增加监听监听年份的改变
yearsSpinner.addChangeListener(newChangeListener(){//注册该组合框的事件监听器
publicvoidstateChanged(ChangeE
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 日历 JAVA 课程设计 实验 报告