实现一可调节月份日历

3 篇文章 0 订阅
1 篇文章 0 订阅

思路主要是根据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

效果图如下:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值