众所周知:万年历可以帮助人们查询日期,一个更能较为完善的万年历可以给人们的使用带来很大的方便。可是面对如此实用的万年历小程序,我们如何用JAVA语言来编写出它呢?下面把本人对万年历的编写过程中的点点体会和大家共享,希望能帮助到要需要帮助的同学们。让他们更好的理解万年历的逻辑算法。
private void initTableModel()
{
} /**这是一个初始化日历界面的自定义方法,日历的关键逻辑算法可以写在这个方法里面,当我们需要查询日期时,点击UI界面的查询按钮等就可以调用initTableModel()此方法来重新初始化界面,这样就可以使要查询的日期的所在的月份的信息界面展现在用户面前。*/
DateFormat dateFormat = DateFormat.getDateInstance();//得到一个格式化的时间对象
try {
dateFormat.parse(year + "-" + month + "-" + 1);//自定义解析格式化时间的格式
} catch (ParseException e) {
e.printStackTrace();
}
/**
*
* declare:一个星期的第一天是星期日
*
* */
Calendar theDay = dateFormat.getCalendar();// 获取与此日期/时间格式器关联的日历,返回一个格式化的日历对象
int dayOfWeek = theDay.get(Calendar.DAY_OF_WEEK);//指示一个星期的某天,第几天。
for (int col = 0; col < dayOfWeek - 1; col++) {//填写第一行的每个月开始前的空格的部分。如[29][30][31] 1 2,要填写的就是[29][30][31],这三个日期是上个月的末尾。
int days = ((month - 1) < 1 ? 31 : daysOfMonth[month - 1]);//计算当前日期的这个月的上一个月有多少天数
int day = days - ((dayOfWeek - 1) - 1 - col);//
tableModel.setValueAt("[ " + day + " ]", 0, col);//
}
int day = 1;//从1号开始了。
for (int col = dayOfWeek - 1; col < 7; col++) {
tableModel.setValueAt(day++, 0, col);//填写本月的面板上的本月日历的信息(不含空格的部分哦)。
}
/**
@declare: initTableModel()方法中的以上代码以上的代码块的功能表示的是日历表格的第一行日历信息。
(非表格头!表格头可视为不属于表格的部分,是另外加载到表格上面的。)
@author Administrator
*/
/**
*
*
*以下为对表格第一行外的其他行进行的信息填充
*
**/
String s = "";
String e = "";
for (int row = 1; row < 6; row++) {
for (int col = 0; col < 7; col++) {
/**
*
* 以下的if判断很重要哦,不能丢哦*/
if (day > daysOfMonth[month]) {
s = "[ ";
e = " ]";
day = 1;
}
tableModel.setValueAt(s + day++ + e, row, col);
}
}
}
public String getSelectedDate() {
return year + "-" + month + "-" + day;
}
}