实现一可调节月份日历

来源:互联网 发布:华为liteos 源码下载 编辑:程序博客网 时间:2024/04/30 06:45

思路主要是根据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 类。 日历代码如下:

[html] view plaincopyprint?
  1. /**  
  2.  * @author Loved_wy  
  3.  */  
  4. public class GetTableData {  
  5.   
  6.     Calendar c = null;  
  7.     Calendar c1 = null;  
  8.   
  9.     public GetTableData() {  
  10.     }  
  11.   
  12.     public Object[][] getTableData(int year, int mouth) {  
  13.           
  14.         c = Calendar.getInstance();  
  15.         c1 = Calendar.getInstance();  
  16.           
  17.         if(mouth != 0 && year != 0){  
  18.             c.set(Calendar.MONTH, mouth - 1);  
  19.             c.set(Calendar.YEAR, year);  
  20.             c1.set(Calendar.MONTH, mouth - 1);  
  21.             c1.set(Calendar.YEAR, year);  
  22.         }  
  23.   
  24.         c.set(Calendar.DAY_OF_MONTH, 1);  
  25.         int firstDayWeek = c.get(Calendar.DAY_OF_WEEK);  
  26.   
  27.         Object[][] object = new Object[6][7];  
  28.   
  29.         c.add(Calendar.DAY_OF_MONTH, -(firstDayWeek - 1));  
  30.           
  31.         for (int x = 0; x < 6; x++) {  
  32.             for (int y = 0; y < 7; y++) {  
  33.                 int m = c1.get(Calendar.MONTH);  
  34.                 if(c.get(Calendar.MONTH) == m){  
  35.                     object[x][y] = c.get(Calendar.DAY_OF_MONTH);  
  36.                 }  
  37.                 c.add(Calendar.DAY_OF_MONTH, 1);  
  38.             }  
  39.         }  
  40.   
  41.         return object;  
  42.     }  
  43.   
  44. }  

 

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

效果图如下:


版权声明:本文为博主原创文章,未经博主允许不得转载。

from:http://write.blog.csdn.net/postedit?ref=toolbar

0 0
原创粉丝点击