实现一可调节月份日历

来源:互联网 发布:酷享网络 编辑:程序博客网 时间:2024/04/30 04:43

思路主要是根据Calendar类中的各属性方法,来实现一个有条件的数字循环,用到或有用的方法:

实例一个日历:c = Calendar.getInstance()

取得年份:c.get(Calendar.YEAR)

取得月份:c.get(Calendar.MONTH) (从Calendar中取得的mouth是从 0 开始!)

取得号数:c.get(Calendar.DAY_OF_MONTH)

设置号数:c.set(Calendar.DAY_OF_MONTH, xx)

取得号数的星期:c.get(Calendar.DAY_OF_WEEK) (从Calendar中取出的星期是从Sunday开始,所以为 1 时即为 Sunday !)

增加天数:c.add(Calendar.DAY_OF_MONTH, xx)  (xx为需要增加的天数,可以为负,为负则为减少,add为自动调节,比如现在是4月30号,那 +1 后,c 为 5 月 1 号 而不是4月31号;月份的增加也相同 ) 

 

思路主要是:建一个表格用以显示,因为某月中最多的周数为 6 ,一周的天数为 7 ,所以表格为 row 6 * column 7;然后就要把相应的数字填充到表格中,那么主要的就是要找到表格的第一个数字是什么,那后面的直接循环即可,首先设置默认日历的号数为 1 ,可得到这个月 1 号是 星期几 ,那么就可得到 它 前面有多少天,在它的基础上减去这个天数,就是表第一行第一列应该显示的数字了,那么循环下去,这个简单的显示本月的日历就做好了;如果要在表中只显示本月的天数的数字,那么再构造一个默认的Calendar类,因为上面操作的 Calendar 类是在不断的变化的,所以 根据两个 Calendar 类的月份进行比较,月份相同的在表中显示,这样就行了。如果还要添加一些其他的特效等,比如星期六,星期天的号数不同颜色显示,参考 DefaultTableCellRenderer 类。 日历代码如下:

/** * @author Loved_wy */public class GetTableData {Calendar c = null;Calendar c1 = null;public GetTableData() {}public Object[][] getTableData(int year, int mouth) {c = Calendar.getInstance();c1 = Calendar.getInstance();if(mouth != 0 && year != 0){c.set(Calendar.MONTH, mouth - 1);c.set(Calendar.YEAR, year);c1.set(Calendar.MONTH, mouth - 1);c1.set(Calendar.YEAR, year);}c.set(Calendar.DAY_OF_MONTH, 1);int firstDayWeek = c.get(Calendar.DAY_OF_WEEK);Object[][] object = new Object[6][7];c.add(Calendar.DAY_OF_MONTH, -(firstDayWeek - 1));for (int x = 0; x < 6; x++) {for (int y = 0; y < 7; y++) {int m = c1.get(Calendar.MONTH);if(c.get(Calendar.MONTH) == m){object[x][y] = c.get(Calendar.DAY_OF_MONTH);}c.add(Calendar.DAY_OF_MONTH, 1);}}return object;}}

 

上面的代码中的方法传入的参数是用于调节年月,只要传入相应的参数即可达到日历变动的目的。-- by loved_wy

效果图如下: