思路主要是根据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
效果图如下: